8

我想获取用户在浏览器中输入的确切网址。当然,我总是可以使用类似的东西,Request.Url.ToString()但这并不能在以下情况下给我想要的东西:

http://www.mysite.com/rss

上面的网址Request.Url.ToString()会给我的是:

http://www.mysite.com/rss/Default.aspx

有谁知道如何做到这一点?

我已经尝试过:

  • Request.Url
  • Request.RawUrl
  • this.Request.ServerVariables["CACHE_URL"]
  • this.Request.ServerVariables["HTTP_URL"]
  • ((HttpWorkerRequest)((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest))).GetServerVariable( "CACHE_URL")
  • ((HttpWorkerRequest)((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest))).GetServerVariable( "HTTP_URL")
4

6 回答 6

6

编辑:您想要HttpWorkerRequest.GetServerVariable()带有键HTTP_URLCACHE_URL. 请注意,IIS 5 和 IIS 6 之间的行为不同(请参阅密钥文档)。

为了能够访问所有服务器变量(以防万一null),直接访问 HttpWorkerRequest:

HttpWorkerRequest workerRequest = 
  (HttpWorkerRequest)((IServiceProvider)HttpContext.Current)
  .GetService(typeof(HttpWorkerRequest)); 
于 2009-04-16T19:58:54.330 回答
4

还要记住,“用户输入的确切 URL”可能永远不会在服务器上可用。从手指到服务器的链中的每个链接都可以稍微修改请求。

例如,如果我在浏览器窗口中输入 xheo.com,IE 会自动转换为http://www.xheo.com。然后,当请求到达 IIS 时,它会告诉浏览器 - 你真的想要http://www.xheo.com/Default.aspx的默认页面。所以浏览器通过询问默认页面来响应。

HTTP 30x 重定向请求也会发生同样的情况。服务器可能只会看到浏览器发出的最终请求。

于 2009-04-16T20:59:52.640 回答
3

尝试使用Request.Url.OriginalString Might 为您提供您正在寻找的东西。

于 2009-10-20T05:42:07.057 回答
1

有可能,您只需要结合请求对象中的一些值来重建输入的确切 url:

Dim pageUrl As String = String.Format("{0}://{1}{2}", 
    Request.Url.Scheme, 
    Request.Url.Host, 
    Request.RawUrl)

Response.Write(pageUrl)

输入地址http://yousite.com/?hello准确返回:

http://yousite.com/?hello
于 2014-04-29T14:38:15.553 回答
0
Request.RawUrl

我想是你追的那只猴子……

于 2009-04-16T20:51:12.083 回答
0

最简单的方法是使用客户端编程来提取确切的 url:

<script language="javascript" type="text/javascript"> 
document.write (document.location.href); 
</script>
于 2011-09-23T05:36:50.297 回答