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

在.NET中是否有一种简单的方法来快速获取当前的协议、主机和端口?例如,如果我在下面的URL:

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

我需要返回:

http://www.mywebsite.com:80

我知道我可以使用Request.Url.AbsoluteUri来获得完整的URL,我知道我可以使用Request.Url.Authority来获得主机和端口,但我不确定在不解析URL字符串的情况下获得协议的最佳方法。

有什么建议吗?

185373 次浏览

请求。Url会返回请求的Uri。一旦你有了它,你就可以检索几乎任何你想要的东西。要获取协议,请调用计划属性。

示例:

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

希望这能有所帮助。

下面的(c#)代码应该可以做到这一点

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

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

如果你在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。这避免了直接的字符串操作。

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 enum允许您指定希望包含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类提供了一系列的方法,其中许多我没有列出。

在我的实例中,我需要获取LocalHostPort 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;

工作来获得

https://www.mywebsite.com:80