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

我想获得用户输入浏览器的确切url。 当然我总是可以使用像Request.Url.ToString()这样的东西但是在下列情况下这不能给我我想要的东西:

http://www.mysite.com/rss

使用上面的URL, 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")

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

为了能够访问所有服务器变量(如果你得到null ),直接访问HttpWorkerRequest:

 HttpWorkerRequest workerRequest = (HttpWorkerRequest)((IServiceProvider)HttpContext.Current) .GetService(typeof(HttpWorkerRequest)); 

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

例如,如果我在浏览器窗口中键入xheo.com,IE将自动转换为http://www.xheo.com 。 然后,当请求到达IIS时,它会向浏览器说 – 您确实需要http://www.xheo.com/Default.aspx上的默认页面。 因此浏览器通过询问默认页面来响应。

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

尝试使用Request.Url.OriginalString可能会给你你想要的东西。

 Request.RawUrl 

我想是你追求的猴子……

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

  

有可能,您只需要组合请求对象中的一些值来重建输入的确切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