.NET - Obtenha protocolo, host e porta
Pergunta
Existe uma maneira simples no .NET de obter rapidamente o protocolo, o host e a porta atuais?Por exemplo, se eu estiver no seguinte URL:
http://www.mywebsite.com:80/pages/page1.aspx
Eu preciso retornar:
http://www.mywebsite.com:80
eu sei que posso usar Request.Url.AbsoluteUri
para obter o URL completo e sei que posso usar Request.Url.Authority
para obter o host e a porta, mas não tenho certeza da melhor maneira de obter o protocolo sem analisar a string do URL.
Alguma sugestão?
Solução
O código a seguir (C#) deve resolver o problema
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Outras dicas
Embora @Rick tenha a resposta aceita para esta pergunta, na verdade existe uma maneira mais curta de fazer isso, usando o nome mal-nomeado Uri.GetLeftPart()
método.
Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string output = url.GetLeftPart(UriPartial.Authority);
Há um problema para GetLeftPart()
, no entanto.Se a porta for a porta padrão do esquema, ela será removida.Como a porta 80 é a porta padrão para http, a saída de GetLeftPart()
no meu exemplo acima será http://www.mywebsite.com
.
Se o número da porta fosse diferente de 80, ele seria incluído no resultado.
Bem, se você estiver fazendo isso no Asp.net ou tiver acesso a httpcontext.current.request, eu diria que essas são maneiras mais fáceis e mais gerais de obtê -las:
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
Eu espero que isso ajude.:)
Uma maneira mais estruturada de conseguir isso é usar o UriBuilder.Isso evita a manipulação direta de strings.
var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);
De maneira ainda mais curta, pode exigir ASP.Net mais recente:
string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)
A enumeração UriComponents permite especificar quais componentes do URI você deseja incluir.
Muito semelhante à resposta de Holger.Se você precisar pegar o URL pode fazer algo como:
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
O Classe Uri fornece uma ampla gama de métodos, muitos dos quais não listei.
No meu caso, eu precisava agarrar LocalHost
juntamente com o Port Number
, então foi isso que eu fiz:
var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Que capturou com sucesso: http://localhost:12345