Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取用户在浏览器中键入的确切url_C#_Asp.net_Url_Request - Fatal编程技术网

C# 获取用户在浏览器中键入的确切url

C# 获取用户在浏览器中键入的确切url,c#,asp.net,url,request,C#,Asp.net,Url,Request,我想获得用户在浏览器中键入的确切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.ServerV

我想获得用户在浏览器中键入的确切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\u URL”]
  • this.Request.ServerVariables[“HTTP\u URL”]
  • ((HttpWorkerRequest)((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest))).GetServerVariable(“缓存URL”)
  • ((HttpWorkerRequest)((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest)).GetServerVariable(“HTTP_URL”)
编辑:您需要使用键或。请注意,IIS 5和IIS 6之间的行为不同(请参阅密钥文档)

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

HttpWorkerRequest workerRequest = 
  (HttpWorkerRequest)((IServiceProvider)HttpContext.Current)
  .GetService(typeof(HttpWorkerRequest)); 
我想这就是你要找的猴子…

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

例如,如果我在浏览器窗口中键入xheo.com,IE将自动转换为。然后,当请求到达IIS时,它会对浏览器说-您确实希望默认页面位于。因此,浏览器的响应是请求默认页面


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

尝试使用
request.Url.OriginalString

可能会给你想要的东西。

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

<script language="javascript" type="text/javascript"> 
document.write (document.location.href); 
</script>

document.write(document.location.href);

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

不工作。获取空值:(我尝试了((HttpWorkerRequest)(IServiceProvider)HttpContext.Current)。GetService(typeof(HttpWorkerRequest))。GetServerVariable(“缓存URL”)和((HttpWorkerRequest)(IServiceProvider)HttpContext.Current)。GetService(typeof(HttpWorkerRequest))。GetServerVariable(“HTTP_URL”)你的平台是什么?可能不是IIS?我目前正在本地工作站上开发(VS 2008 sp 1、.net 3.5 sp1、Win XP、IE7、IIS 5.1)它是“URL”,而不是“HTTP\U URL”,但是,当浏览器仅请求一个目录时,cassini和IIS 7都返回完整路径,包括文件名。我没有在IIS 6上检查它-您使用的是Lucero哪个版本?嗯,对不起,我已更正-我正在迭代集合。但是,HTTP_URL返回与URL相同的路径。在IIS 7上似乎对我有效的是Request.ServerVariables[“CACHE_URL”]但是这会为我返回:(即带有端口号)。不,这也是我的第一个建议(从那时起我将其编辑掉).可以理解。我不太关心用户输入的http://或www部分。我的主要目标是了解他们是否在mysite.com/rss或mysite.com/rss/default.aspxDefault文档中输入(在IIS上)是在服务器内部进行的,而不是通过客户端重定向。这只适用于没有以a/I结尾的目录名。我希望最初请求的url在某个地方是可用的…你是说你不这么认为吗?IIS必须在某个时候拥有它,这样它才知道要提供什么默认文档?你能解释一下为什么你不这样做吗ed想区分rss/和rss/default.aspx吗?实际上,它们是一样的。我相信有一个很好的理由,但理解它可能有助于找到更好的解决方案。通常这种请求是为了SEO目的:请每个页面只显示一个URL,而不是两个或三个-默认文档是SEO顾问的祸根如果你查看Cassini源代码,你会发现用户请求的URL在调用HttpRuntime.ProcessRequest之前被覆盖(在某些情况下)。这几乎排除了任何HttpWorkerRequest不可知的方法。
http://yousite.com/?hello