.NET-получить протокол, хост и порт
есть ли простой способ в .NET, чтобы быстро получить текущий протокол, хост и порт? Например, если я нахожусь по следующему URL:
http://www.mywebsite.com:80/pages/page1.aspx
мне нужно:
http://www.mywebsite.com:80
Я знаю, что могу использовать Request.Url.AbsoluteUri чтобы получить полный URL, и я знаю, что могу использовать Request.Url.Authority чтобы получить хост и порт, но я не уверен, что лучший способ получить протокол без разбора строки URL.
какие предложения?
7 ответов:
следующий (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.Текущий.Запрос Я бы сказал, что это более простые и более общие способы их получения:
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 перечисление позволяет вам определить, какой компонент(ы) в Ури, который вы хотите включить.
очень похоже на ответ Хольгера. Если вам нужно захватить 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 numberThe класс Uri предоставляет целый ряд методов, многие из которых я не перечислил.
в моем случае, мне нужно было захватить
LocalHostвместе сPort Number, Так вот что я сделал:var Uri uri = Context.Request.Url; var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;успешно схватил:
http://localhost:12345
Comments