2009-04-23 78 views
7

在ASP.NET中,有没有什么办法可以获得真实的原始URL?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”转换为“//”,然后将斜杠转换为单斜杠。

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

回答

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指向我的线程。

+0

这是正确的解决方案。它解决了路径中存在编码时的问题。来自服务器变量的HTTP_URL将显示解码版本,并且此解决方案提供了正确的编码版本。 – 2014-05-05 13:44:13

1
Server.HtmlEncode(Request.RawUrl); 

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

还看到:link text

+0

Request中的任何URL都可能已经清理完毕,Request.ServerVariables [“HTTP_URL”]更准确。 – 2010-02-08 09:32:08

0

好吧,你可以只对其进行编码,回网址编码版本。

0

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

Request.Url.AbsoluteUri 
0

从请求获取URL,并用urlencode只查询字符串部分,然后将它们连接起来

1

Request.RawUrl将返回应用程序相对路径(包括查询字符串信息),而Request.Url将返回完整路径(包括查询字符串信息)。请参阅“Making sense of ASP.NET paths”。

6

我不能对此进行测试,因为它只能在IIS而不是ASP.NET开发服务器是Visual Studio中的一部分,但尝试:

Request.ServerVariables [“HTTP_URL”]

+0

这会为我返回预期的结果,但它确实需要与HTTP_HOST和HTTP_QUERY结合以获取URL的其余部分。 – 2010-02-08 09:33:26