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?

Foi útil?

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);

Request.Url retornará o Uri do pedido.Depois de fazer isso, você poderá recuperar praticamente tudo o que quiser.Para obter o protocolo, ligue para o Esquema propriedade.

Amostra:

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

Espero que isto ajude.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top