Сведения о вопросе

HEIGTH

01:54, 28th August, 2020

Теги

.net   asp.net   url   uri   authority    

.NET-получить протокол, хост и порт

Просмотров: 474   Ответов: 7

Есть ли простой способ в .NET быстро получить текущий протокол, хост и порт? Например, если я нахожусь на следующем URL:

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

Мне нужно вернуться:

http://www.mywebsite.com:80

Я знаю, что могу использовать Request.Url.AbsoluteUri для получения полного URL, и я знаю, что могу использовать Request.Url.Authority для получения хоста и порта, но я не уверен в лучшем способе получения протокола без разбора строки URL.

Есть какие-нибудь предложения?



  Сведения об ответе

screen

18:56, 16th August, 2020

Несмотря на то, что @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, он был бы включен в результат.


  Сведения об ответе

pumpa

08:07, 15th August, 2020

Следующий код (C#) должен сделать трюк

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;


  Сведения об ответе

COOL

07:20, 4th August, 2020

Хорошо, если вы делаете это в 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

Надеюсь, это поможет. :)


  Сведения об ответе

park

10:59, 29th August, 2020

Более структурированный способ получить это-использовать UriBuilder. Это позволяет избежать прямого манипулирования строкой.

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);


  Сведения об ответе

crush

17:29, 27th August, 2020

Request.Url вернет вам Uri запроса. Как только вы это сделаете, вы сможете получить практически все, что захотите. Чтобы получить протокол, вызовите свойство Scheme .

Образец:

Uri url = Request.Url;
string protocol = url.Scheme;

Надеюсь, это поможет.


  Сведения об ответе

DAAA

16:01, 13th August, 2020

Еще более короткий путь, может потребоваться более новый ASP.Net:

string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)

Перечисление UriComponents позволяет указать, какие компоненты URI вы хотите включить.


  Сведения об ответе

appple

10:23, 10th August, 2020

Очень похоже на ответ Хольгера. Если вам нужно захватить 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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться