.NET - 获取协议,主机和端口

时间:2008-08-22 02:18:28

标签: .net asp.net url uri authority

.NET中有一种简单的方法可以快速获取当前的协议,主机和端口吗?例如,如果我在以下网址上:

http://www.mywebsite.com:80/pages/page1.aspx

我需要回复:

http://www.mywebsite.com:80

我知道我可以使用Request.Url.AbsoluteUri来获取完整的网址,而且我知道我可以使用Request.Url.Authority来获取主机和端口,但我不确定获取主机和端口的最佳方式协议,而不解析URL字符串。

有什么建议吗?

7 个答案:

答案 0 :(得分:381)

尽管@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,那么它将包含在结果中。

答案 1 :(得分:158)

以下(C#)代码应该做的伎俩

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;

答案 2 :(得分:57)

好吧,如果您在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

我希望这会有所帮助。 :)

答案 3 :(得分:29)

更有条理的方法是使用UriBuilder。这避免了直接字符串操作。

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);

答案 4 :(得分:20)

Request.Url会返回请求的Uri。一旦你拥有了它,你可以检索你想要的任何东西。要获取协议,请调用Scheme属性。

样品:

Uri url = Request.Url;
string protocol = url.Scheme;

希望这有帮助。

答案 5 :(得分:16)

更短的方式,可能需要更新的ASP.Net:

string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)

UriComponents枚举允许您指定要包含的URI的组件。

答案 6 :(得分:8)

非常类似于霍尔格的回答。如果您需要获取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 class提供了一系列方法,其中许多方法都没有列出。

在我的例子中,我需要抓住LocalHost以及Port Number,所以这就是我所做的:

var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 

成功抓获:http://localhost:12345