ASP.NET:获取*真实*原始URL

时间:2009-04-23 13:07:02

标签: asp.net url url-encoding rawurl

在ASP.NET中,有没有办法获取真正的原始URL?

例如,如果用户浏览到“http://example.com/mypage.aspx/%2F”,我希望能够获得“http://example.com/mypage.aspx/%2F”而不是“http://example.com/mypage.aspx//”。

我当然喜欢干净利落的方式,但我可以使用反射或访问模糊属性的hacky方法。

目前,我尝试在Authorization-header(可行)中使用uri,但我不能完全依赖它。

修改

我真正想要做的是能够区分“http://example.com/mypage.aspx/%2F”和“http://example.com/mypage.aspx/%2F%2F”。

看起来ASP.NET首先将“%2F%2F”转换为“//”,然后将斜杠转换为单斜杠。

所以只是重新编码它不会起作用。

8 个答案:

答案 0 :(得分:6)

我无法对此进行测试,因为它只适用于IIS,而不适用于Visual Studio中的ASP.NET Development Server,但请尝试:

Request.ServerVariables [“HTTP_URL”]

答案 1 :(得分:6)

以下代码适用于我:

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

请注意,这仅适用于在IIS上运行而不在f.x下运行。 ASP.NET开发服务器!

感谢Lucero在另一个帖子中找到答案,感谢Zhaph将我指向该帖子。

答案 2 :(得分:2)

答案 3 :(得分:1)

 Server.HtmlEncode(Request.RawUrl);

原始URL定义为域信息后面的URL部分。在URL字符串http://www.contoso.com/articles/recent.aspx中,原始URL为/articles/recent.aspx。原始URL包括查询字符串(如果存在)。

另见:link text

答案 4 :(得分:1)

Request.RawUrl将返回应用程序相对路径(包括查询字符串信息),而Request.Url将返回完整路径(包括查询字符串信息)。

有关详细信息,请参阅“Making sense of ASP.NET paths”。

答案 5 :(得分:0)

好吧,你可以把它编码回url编码的版本。

答案 6 :(得分:0)

我不能在这里测试,但这可能是你需要的:

Request.Url.AbsoluteUri

答案 7 :(得分:0)

从请求中获取url并仅对查询字符串部分进行urlencode,然后将它们连接起来