.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()方法。
1 2
| 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)代码应该可以做到这一点
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类提供了一系列方法,其中许多方法我没有列出。
在我的例子中,我需要抓住LocalHost和Port Number,所以我这样做了:
1 2
| var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host +":" + uri.Port; |
成功抓获:http://localhost:12345。