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

时间:2020-03-05 18:41:52  来源:igfitidea点击:

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

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

我需要退货:

http://www.mywebsite.com:80

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

有什么建议?

解决方案

回答

Request.Url将向我们返回请求的Uri。一旦有了它,我们就可以检索几乎所有我们想要的东西。要获取协议,请调用Scheme属性。

样本:

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

我希望这有帮助。 :)