.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()
方法。
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#)代码应该可以解决问题
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 我想说这些是更简单、更通用的获取它们的方法:
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 枚举可让您指定要包含的 URI 的哪个或哪些组件。
与霍尔格的回答非常相似。如果您需要抓取 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
以我为例
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Authority;
努力获得
就我而言,我使用这个
Request.Url.ToString().Remove(Request.Url.ToString().Count() - (Request.ServerVariables["URL"].ToString().Count()))
哪里
Request.Url.ToString()
返回http://www.mywebsite.com:80/pages/page1.aspx
Request.ServerVariables["URL"].ToString()
返回/pages/page1.aspx