.NET中是否有一种简单的方法可以快速获取当前协议,主机和端口?例如,如果我在以下URL上:
http://www.mywebsite.com:80/pages/page1.aspx
我需要退货:
http://www.mywebsite.com:80
我知道可以Request.Url.AbsoluteUri
用来获取完整的URL,也可以Request.Url.Authority
用来获取主机和端口,但是我不确定在不解析URL字符串的情况下获取协议的最佳方法。
有什么建议?
.NET中是否有一种简单的方法可以快速获取当前协议,主机和端口?例如,如果我在以下URL上:
http://www.mywebsite.com:80/pages/page1.aspx
我需要退货:
http://www.mywebsite.com:80
我知道可以Request.Url.AbsoluteUri
用来获取完整的URL,也可以Request.Url.Authority
用来获取主机和端口,但是我不确定在不解析URL字符串的情况下获取协议的最佳方法。
有什么建议?
Answers:
以下(C#)代码应该可以解决问题
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Uri.GetLeftPart
如@dthrasher指出
即使@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,则将其包含在结果中。
Uri
这种方式使用该类。在很多情况下,此构造函数将引发异常。在大多数情况下,我希望我的代码在放弃手头的任务之前要宽容一些。
好吧,如果您在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
我希望这有帮助。:)
非常类似于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类提供了一整套的方法,有很多我还没有上市。
在我的情况下,我需要抢LocalHost
随着一起Port Number
,所以这是我做的:
var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
哪个成功抢了: http://localhost:12345