2009-04-23 29 views
7

Trong ASP.NET, có cách nào để nhận được URL thực thực không?ASP.NET: Nhận URL đích * thực *

Ví dụ: nếu người dùng duyệt đến "http://example.com/mypage.aspx/%2F", tôi muốn có thể nhận được "http://example.com/mypage.aspx/%2F" thay vì "http://example.com/mypage.aspx//".

Tôi sẽ tất nhiên như một cách sạch sẽ để làm điều đó, nhưng tôi có thể sống với một cách tiếp cận hacky bằng cách sử dụng phản ánh hoặc truy cập tài sản mơ hồ.

Hiện tại, tôi cố gắng sử dụng uri trong tiêu đề Cấp quyền (hoạt động), nhưng tôi không thể dựa vào đó luôn ở đó.

EDIT:

Những gì tôi thực sự muốn làm là để có thể phân biệt giữa "http://example.com/mypage.aspx/%2F" và "http://example.com/mypage.aspx/%2F%2F".

Dường như ASP.NET đầu tiên chuyển đổi "% 2F% 2F" thành "//" và sau đó chuyển đổi dấu gạch chéo thành dấu gạch chéo đơn.

Vì vậy, chỉ cần mã hóa lại nó sẽ không hoạt động.

Trả lời

6

Các mã sau đây làm việc cho tôi:

IServiceProvider serviceProvider = (IServiceProvider)HttpContext.Current; 
HttpWorkerRequest workerRequest = (HttpWorkerRequest)serviceProvider.GetService(typeof(HttpWorkerRequest)); 
string realUrl = workerRequest.GetServerVariable("HTTP_URL"); 

Lưu ý rằng điều này chỉ hoạt động khi chạy trên IIS chứ không phải dưới f.x. ASP.NET phát triển máy chủ!

Nhờ Lucero cho câu trả lời trong một chuỗi khác và Zhaph để chỉ cho tôi đến chuỗi.

+0

Đây là giải pháp đúng. Nó giải quyết các vấn đề khi có mã hóa trong đường dẫn. HTTP_URL từ các biến máy chủ sẽ hiển thị phiên bản đã giải mã và giải pháp này cung cấp phiên bản được mã hóa chính xác. –

+0

Điều này trả về kết quả mong đợi theo IIS Express – Vivelin

1
Server.HtmlEncode(Request.RawUrl); 

URL thô được định nghĩa là một phần của URL theo thông tin tên miền. Trong chuỗi URL http://www.contoso.com/articles/recent.aspx, URL thô là /articles/recent.aspx. URL thô bao gồm chuỗi truy vấn, nếu có.

also see: link text

+0

Bất kỳ URL nào trong Yêu cầu đều có thể đã được dọn sạch, Request.ServerVariables ["HTTP_URL"] chính xác hơn. –

0

Vâng, bạn chỉ có thể mã hóa nó trở lại phiên bản url-mã hóa.

0

tôi không thể kiểm tra ở đây, nhưng điều này có thể là những gì bạn cần:

Request.Url.AbsoluteUri 
0

Lấy url từ yêu cầu và urlencode chỉ là phần chuỗi truy vấn và sau đó ghép chúng

1

Request.RawUrl sẽ trở lại đường dẫn tương đối của ứng dụng (bao gồm cả thông tin chuỗi truy vấn) trong khi Request.Url sẽ trả lại đường dẫn đầy đủ (bao gồm cả thông tin chuỗi truy vấn).

Để biết thêm thông tin, hãy xem "Making sense of ASP.NET paths".

6

tôi đã không thể kiểm tra điều này bởi vì nó chỉ hoạt động trong IIS và không Server Phát triển ASP.NET là một phần của Visual Studio, nhưng thử:

Request.ServerVariables [ "HTTP_URL"]

+0

Điều này trả về kết quả mong đợi cho tôi, mặc dù nó cần kết hợp với HTTP_HOST và HTTP_QUERY để nhận được phần còn lại của URL. –