如何获取我在C#中所在页面的完整URL


Answers:


155

我通常使用Request.Url.ToString()来获取完整的url(包括querystring),不需要串联。


2
如果URL包含“#”,则将不包含#之后的所有字符。
Krunal Sisodiya'9

5
@KrunalSisodiya我不认为URL的哈希值曾经发送到服务器,但是我可能是错的。
特拉维斯

Request.Url.ToString()不包含queryString。
Yogesh Patel

320

这是我通常参考的此类信息列表:

Request.ApplicationPath :   /virtual_dir
Request.CurrentExecutionFilePath :  /virtual_dir/webapp/page.aspx
Request.FilePath :  /virtual_dir/webapp/page.aspx
Request.Path :  /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath :   d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString :   /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath :  /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri :   http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host :  localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery :  /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port :  80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme :    http
Request.Url.Segments :  /
    virtual_dir/
    webapp/
    page.aspx

希望您会发现这很有用!


1
1)还有Request.RawUrl; 2)Request.Url可能在“非常错误的请求路径”上引发异常。
user2864740

很有帮助的答案,但是端口号不应该保持一致以避免混淆(假设所有示例都针对同一请求吗?例如,Authority和Port暗示端口80,但AbsoluteUri包含端口2000)
Young Bob

Request.QueryStringq=qvalue仅返回
Marcel


10

因为ASP.NET Core您需要说明一下:

@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")

或者,您可以在视图中添加using语句:

@using Microsoft.AspNetCore.Http.Extensions

然后

@Context.Request.GetDisplayUrl()

_ViewImports.cshtml可能是一个更好的地方@using


1
谢谢。这有帮助!
FlyingV


9

如果您需要完整的URL作为从http到querystring的所有内容,则需要连接以下变量

Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME") 
Request.ServerVariables("SCRIPT_NAME") 
Request.ServerVariables("QUERY_STRING")

2
这并未考虑非标准端口(即,未将端口80用于http)
Spongeboy

1
您可以使用Request.ServerVariables(“ SERVER_PORT”)进行端口检测!
阿曼,2014年

1
请注意,此答案使用VB.Net语法。在C#中,例如,使用Request.ServerVariables [“ HTTPS”]。
jaycer

7

Request.Url.OriginalStringRequest.Url.ToString()(根据MSDN)更好用


只有真正需要原始字符串时,这才更好。
德克2014年

@DirkThe到以上MSDN的链接:“由ToString方法返回的字符串可能包含控制字符,这可能会破坏控制台应用程序的状态。您可以将GetComponents方法与UriFormat.SafeUnescaped格式一起使用,以从返回的字符串中删除控制字符。 ”。
埃尼2014年

确实如此,并且与无关OriginalString
德克2014年

5

谢谢大家,我将您的答案@Christian和@Jonathan结合使用以满足我的特定需求。

"http://" + Request.ServerVariables["SERVER_NAME"] +  Request.RawUrl.ToString()

我不需要担心安全的http,不需要servername变量,而RawUrl可以处理来自域名的路径,并包括querystring(如果存在)。


2
您还应该知道,如果正在使用url映射,则RawUrl与Request.Url不同,它代表原始的未映射请求url。
哈波

SERVER_NAME通常不返回客户端使用的“真实” URL。如果要直接进行挖掘,则HTTP_HOST可能是更好的形式。也错过了简单的HTTP-to-another-port。
user2864740

1

如果还需要端口号,则可以使用

Request.Url.Authority

例:

string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();

if (Request.ServerVariables["HTTPS"] == "on")
{
    url = "https://" + url;
}
else 
{
    url = "http://" + url;
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.