8

在 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”转换为“//”,然后将斜杠转换为单个斜杠。

所以只是重新编码它是行不通的。

4

8 回答 8

6

我无法对此进行测试,因为它仅适用于 IIS,而不适用于 Visual Studio 中的 ASP.NET 开发服务器,但请尝试:

Request.ServerVariables[ "HTTP_URL" ]

于 2009-04-23T14:26:40.827 回答
6

以下代码适用于我:

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

请注意,这只适用于在 IIS 上运行而不是在 fx ASP.NET 开发服务器下运行!

感谢Lucero在另一个线程中的回答和Zhaph将我指向线程。

于 2009-04-23T18:55:40.450 回答
2

也可以看看:

获取用户在浏览器中输入的确切 url

于 2009-04-23T15:09:03.563 回答
1

Request.RawUrl will return the application relative path(including querystring info) while Request.Url will return the complete path(including querystring info).

For more information, see "Making sense of ASP.NET paths".

于 2009-04-23T13:18:28.963 回答
1
 Server.HtmlEncode(Request.RawUrl);

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

另见:链接文本

于 2009-04-23T13:13:44.480 回答
1

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

Request.Url.AbsoluteUri
于 2009-04-23T13:15:53.150 回答
0

好吧,您可以将其编码回 url 编码的版本。

于 2009-04-23T13:15:04.617 回答
0

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

于 2009-04-23T13:15:55.597 回答