ASP.NET:获取*真实*原始URL
在ASP.NET中,是否有任何方法可以获取真实的原始URL 例如,如果用户浏览到“”,我希望能够获得“”,而不是“” 我当然希望有一个干净的方法来做这件事,但我可以接受使用反射或访问模糊属性的黑客方法 目前,我尝试在授权头中使用uri(这是可行的),但我不能指望它总是在那里 编辑: 我真正想做的是能够区分“”和“” 看起来ASP.NET首先将“%2F%2F”转换为“/”,然后将斜杠转换为单个斜杠 所以仅仅重新编码是行不通的ASP.NET:获取*真实*原始URL,asp.net,url,url-encoding,rawurl,Asp.net,Url,Url Encoding,Rawurl,在ASP.NET中,是否有任何方法可以获取真实的原始URL 例如,如果用户浏览到“”,我希望能够获得“”,而不是“” 我当然希望有一个干净的方法来做这件事,但我可以接受使用反射或访问模糊属性的黑客方法 目前,我尝试在授权头中使用uri(这是可行的),但我不能指望它总是在那里 编辑: 我真正想做的是能够区分“”和“” 看起来ASP.NET首先将“%2F%2F”转换为“/”,然后将斜杠转换为单个斜杠 所以仅仅重新编码是行不通的 Server.HtmlEncode(Request.RawUrl);
Server.HtmlEncode(Request.RawUrl);
原始URL被定义为域信息后面的URL的一部分。在URL字符串中,原始URL为/articles/recent.aspx。原始URL包括查询字符串(如果存在)
另请参见:好吧,您可以将其编码回url编码版本。我无法在此测试,但这可能是您需要的:
Request.Url.AbsoluteUri
从请求中获取url,url仅对查询字符串部分进行编码,然后将它们连接起来。
请求。RawUrl
将返回应用程序相对路径(包括查询字符串信息),而请求。url
将返回完整路径(包括查询字符串信息)
有关详细信息,请参阅“”。我无法测试此功能,因为它仅在IIS中工作,而不在作为Visual Studio一部分的ASP.NET开发服务器中工作,但请尝试: Request.ServerVariables[“HTTP\u URL”]另请参见:
以下代码适用于我:
IServiceProvider serviceProvider = (IServiceProvider)HttpContext.Current;
HttpWorkerRequest workerRequest = (HttpWorkerRequest)serviceProvider.GetService(typeof(HttpWorkerRequest));
string realUrl = workerRequest.GetServerVariable("HTTP_URL");
请注意,这仅在IIS上运行时有效,而不在f.x.ASP.NET开发服务器下运行
感谢您在另一个线程中给出了答案并将我指向该线程。请求中的所有URL都可能已被清除,Request.ServerVariables[“HTTP\U URL”]更准确。这将为我返回预期结果,但它确实需要与HTTP\U主机和HTTP\U查询结合以获得URL的其余部分。这是正确的解决方案。它解决了路径中存在编码时的问题。来自服务器变量的HTTP_URL将显示解码版本,此解决方案提供正确的编码版本。这也将在IIS Express下返回预期结果