关于ASP.NET:如何在C#语言中获取我所在页面的完整URL

How do I get the full url of the page I am on in C#

我需要能够从用户控件获取我所在页面的完整URL。只是将一组请求变量连接在一起的问题吗?如果是,哪一个?还是有更简单的方法?


以下是我通常参考的关于此类信息的列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

希望你会发现这很有用!


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


1
Request.Url.AbsoluteUri

这个属性做你需要的一切,都在一个简洁的调用中。


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

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


请求网址


对于ASP.NET Core,您需要详细说明:

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

或者可以向视图中添加using语句:

1
@using Microsoft.AspNetCore.Http.Extensions

然后

1
@Context.Request.GetDisplayUrl()

江户十一〔4〕可能是江户十一〔5〕更好的地方。


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


谢谢各位,我结合了你们的回答@Christian和@Jonathan来满足我的特殊需要。

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

我不需要担心安全HTTP,需要servername变量,rawurl处理域名中的路径,如果存在,还包括querystring。


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

1
Request.Url.Authority

例子:

1
2
3
4
5
6
7
8
9
10
string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();

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

尝试以下操作-

1
2
var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();