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

.net asp.net url uri authority

148704 просмотра

7 ответа

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

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

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

http://www.mywebsite.com:80

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

Какие-либо предложения?

Автор: Jeremy Источник Размещён: 11.11.2019 03:26

Ответы (7)


161 плюса

Решение

Следующий (C #) код должен помочь

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Автор: Rick Размещён: 22.08.2008 01:35

388 плюса

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

Автор: dthrasher Размещён: 23.02.2009 03:45

58 плюса

Хорошо, если вы делаете это в 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 Размещён: 16.11.2010 02:42

31 плюса

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

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);
Автор: Haonan Tan Размещён: 08.03.2011 09:56

22 плюса

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

Образец:

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

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

Автор: Dale Ragan Размещён: 22.08.2008 02:48

17 плюса

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

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

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

Автор: Mark Shapiro Размещён: 16.09.2015 06:07

8 плюса

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

Автор: benscabbia Размещён: 14.11.2015 10:40
32x32