在.NET中,有没有一种简单的方法可以快速获取当前协议、主机和端口?例如,如果我在以下URL上:
http://www.mywebsite.com:80/pages/page1.aspx
我需要返回:
http://www.mywebsite.com:80
我知道可以使用Request.Url.AbsoluteUri
获取完整的URL,也知道可以使用Request.Url.Authority
获取主机和端口,但不确定获取协议的最佳方式,而不是解析URL字符串。
您有什么建议吗?
在.NET中,有没有一种简单的方法可以快速获取当前协议、主机和端口?例如,如果我在以下URL上:
http://www.mywebsite.com:80/pages/page1.aspx
我需要返回:
http://www.mywebsite.com:80
我知道可以使用Request.Url.AbsoluteUri
获取完整的URL,也知道可以使用Request.Url.Authority
获取主机和端口,但不确定获取协议的最佳方式,而不是解析URL字符串。
您有什么建议吗?
虽然 @Rick 对这个问题有已接受的答案,但实际上有一种更短的方法可以做到这一点,使用名字不太好的Uri.GetLeftPart()
方法。
Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string output = url.GetLeftPart(UriPartial.Authority);
不过,GetLeftPart()
有一个限制。如果端口是该方案的默认端口,则会将其删除。由于80端口是http的默认端口,因此上面示例中的GetLeftPart()
输出将为 http://www.mywebsite.com
。
如果端口号不是80,则它将包含在结果中。
以下 (C#) 代码应该能解决问题。
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Uri.GetLeftPart
。 - gman如果你在使用Asp.Net或者可以访问HttpContext.Current.Request的话,我认为以下两种方法更加简单通用:
var scheme = Request.Url.Scheme; // will get http, https, etc.
var host = Request.Url.Host; // will get www.mywebsite.com
var port = Request.Url.Port; // will get the port
var path = Request.Url.AbsolutePath; // should get the /pages/page1.aspx part, can't remember if it only get pages/page1.aspx
更结构化的方法是使用UriBuilder来获取URL,这避免了直接进行字符串操作。
var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);
更短的方式,可能需要更新的ASP.Net版本:
string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)
UriComponents 枚举类型允许您指定要包含哪些 URI 组件。
与 Holger 的回答非常相似。如果您需要抓取 URL,可以尝试以下方法:
Uri uri = Context.Request.Url;
var scheme = uri.Scheme // returns http, https
var scheme2 = uri.Scheme + Uri.SchemeDelimiter; // returns http://, https://
var host = uri.Host; // return www.mywebsite.com
var port = uri.Port; // returns port number
Uri类提供了许多方法,其中很多我没有列出。
在我的情况下,我需要获取LocalHost
和Port Number
,所以我做了以下操作:
var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
成功抓取到的网址:http://localhost:12345
对于我的情况
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Authority;
获取工作
Request.Url.ToString().Remove(Request.Url.ToString().Count() - (Request.ServerVariables["URL"].ToString().Count()))
Request.Url.ToString()
返回 http://www.mywebsite.com:80/pages/page1.aspx
Request.ServerVariables["URL"].ToString()