Ответ 1
Следующий код (С#) должен делать трюк
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Есть ли простой способ в .NET быстро получить текущий протокол, хост и порт? Например, если у меня есть следующий URL-адрес:
http://www.mywebsite.com:80/pages/page1.aspx
Мне нужно вернуть:
http://www.mywebsite.com:80
Я знаю, что могу использовать Request.Url.AbsoluteUri
, чтобы получить полный URL-адрес, и я знаю, что могу использовать Request.Url.Authority
для получения хоста и порта, но я не уверен, что лучший способ получить протокол без разбора строка URL.
Любые предложения?
Следующий код (С#) должен делать трюк
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.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);
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 вы хотите включить.
Очень похоже на ответ Хольгера. Если вам нужно захватить 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