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 获取原始内容

带有 ASP.NET 路由的原始、未处理的 URL

获取动态更改的 asp.net 标签的值

如何在 Asp .Net Core SignalR Hub 中获取不记名令牌?

asp.net mvc3 返回原始 html 以查看

ASP.NET 的框架 javascript 不允许我呈现原始 HTML IFRAME