.NET – 获取协议,主机和端口
.NET中有一种简单的方法来快速获取当前的协议,主机和端口吗? 例如,如果我在以下url:
http://www.mywebsite.com:80/pages/page1.aspx
我需要返回:
http://www.mywebsite.com:80
我知道我可以使用Request.Url.AbsoluteUri
来获得完整的URL,我知道我可以使用Request.Url.Authority
来获取主机和端口,但我不知道最好的方式来获得协议而不parsing输出URLstring。
有什么build议么?
以下(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()
有一个问题。 如果该端口是该scheme的默认端口,则会将其除去。 由于端口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。 这避免了直接的string操作。
var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);
Request.Url会向您返回请求的Uri 。 一旦你有了,你可以检索你想要的东西。 要获得协议,请调用Scheme属性。
样品:
Uri url = Request.Url; string protocol = url.Scheme;
希望这可以帮助。
更短的方式,可能需要更新的ASP.Net:
string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)
UriComponents枚举让你指定你想包含的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课程提供了一整套方法,其中很多我没有列出。
在我的例子中,我需要抓取LocalHost
和Port Number
,所以这是我做的:
var Uri uri = Context.Request.Url; var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
哪个成功抓取: http://localhost:12345
- Visual Studio 2010:无法parsingmscorlib目标框架“.NETFramework,版本= v4.0”
- HttpContent.ReadAsAsync在哪里?
- asynchronousTask.WhenAll超时
- 为什么我得到这个错误:没有为以下EntitySet / AssociationSet – Entity1指定的映射?
- 我怎样才能得到我的web应用程序的基本URL在ASP.NET MVC?
- 文件被复制到SysWOW64而不是System32
- 为什么IList不支持AddRange
- Visual Studio跳转到下一个错误快捷方式?
- 在App.config中的connectionStrings configSource不起作用