.NET - Get protocol, host, and port
.NET中是否有一种简单的方法可以快速获取当前协议、主机和端口?例如,如果我在以下URL上:
我要回去:
我知道我可以使用
有什么建议吗?
尽管@rick已经接受了这个问题的答案,但实际上有一种更短的方法可以做到这一点,即使用名称不好的
1 2 | Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx"); string output = url.GetLeftPart(UriPartial.Authority); |
不过,对
如果端口号不是80,它将包含在结果中。
下面的(c)代码应该可以做到这一点
1 2 | Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx"); string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host +":" + uri.Port; |
如果您在ASP.NET中执行此操作,或者可以访问httpContext.current.request我想说,这些是更简单和更一般的方法:
1 2 3 4 | 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。这避免了直接的字符串操作。
1 | var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port); |
url将返回请求的URI。一旦你拥有了它,你就可以得到你想要的任何东西。要获取协议,请调用Scheme属性。
Sample:
1 2 | Uri url = Request.Url; string protocol = url.Scheme; |
希望这有帮助。
甚至更短的方法,可能需要更新的ASP.NET:
1 | string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped) |
UriComponents枚举允许您指定要包括的URI组件。
与霍尔格的答案非常相似。如果需要获取URL,可以执行以下操作:
1 2 3 4 5 | 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类提供了一系列方法,其中许多方法我没有列出。
在我的例子中,我需要抓住
1 2 | var Uri uri = Context.Request.Url; var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host +":" + uri.Port; |
成功抓获: