在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”转换为“//”,然后将斜杠转换为单斜杠。
所以只是重新编码它不会起作用。
答案 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开发服务器!
答案 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,然后将它们连接起来