ASP.NET:获取 *real* 原始 URL
Posted
技术标签:
【中文标题】ASP.NET:获取 *real* 原始 URL【英文标题】:ASP.NET: Get *real* raw URL 【发布时间】:2010-10-21 08:42:27 【问题描述】:在 ASP.NET 中,有没有办法获取 real 原始 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”转换为“//”,然后将斜杠转换为单个斜杠。
所以只是重新编码是行不通的。
【问题讨论】:
【参考方案1】:以下代码适用于我:
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 将我指向该线程。
【讨论】:
这是正确的解决方案。它解决了路径中存在编码时的问题。服务器变量中的 HTTP_URL 将显示解码版本,此解决方案提供正确的编码版本。 这也返回了 IIS Express 下的预期结果【参考方案2】:Request.RawUrl
将返回应用程序相对路径(包括查询字符串信息),而Request.Url
将返回完整路径(包括查询字符串信息)。
有关详细信息,请参阅“Making sense of ASP.NET paths”。
【讨论】:
【参考方案3】:另见:
Get the exact url the user typed into the browser
【讨论】:
【参考方案4】:我无法对此进行测试,因为它仅适用于 IIS,而不适用于 Visual Studio 中的 ASP.NET 开发服务器,但请尝试:
Request.ServerVariables[ "HTTP_URL" ]
【讨论】:
这为我返回了预期的结果,尽管它确实需要结合 HTTP_HOST 和 HTTP_QUERY 来获取 URL 的其余部分。【参考方案5】:从请求中获取url,只对查询字符串部分进行urlencode,然后将它们连接起来
【讨论】:
【参考方案6】:我不能在这里测试,但这可能是你需要的:
Request.Url.AbsoluteUri
【讨论】:
【参考方案7】:嗯,你可以把它编码回 url 编码的版本。
【讨论】:
【参考方案8】: Server.htmlEncode(Request.RawUrl);
原始 URL 定义为 URL 中域信息之后的部分。在 URL 字符串 http://www.contoso.com/articles/recent.aspx 中,原始 URL 是 /articles/recent.aspx。原始 URL 包括查询字符串(如果存在)。
另见:link text
【讨论】:
Request 中的任何 URL 都可能已被清除,Request.ServerVariables["HTTP_URL"] 更准确。以上是关于ASP.NET:获取 *real* 原始 URL的主要内容,如果未能解决你的问题,请参考以下文章
asp.net 核心 1.0 mvc。从 Request.Body 获取原始内容