Pregunta

¿Existe una forma sencilla en .NET de obtener rápidamente el protocolo, el host y el puerto actuales?Por ejemplo, si estoy en la siguiente URL:

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

Necesito regresar:

http://www.mywebsite.com:80

sé que puedo usar Request.Url.AbsoluteUri para obtener la URL completa, y sé que puedo usar Request.Url.Authority para obtener el host y el puerto, pero no estoy seguro de cuál es la mejor manera de obtener el protocolo sin analizar la cadena URL.

¿Alguna sugerencia?

¿Fue útil?

Solución

El siguiente código (C#) debería funcionar

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

Otros consejos

Aunque @Rick tiene la respuesta aceptada para esta pregunta, en realidad hay una manera más corta de hacerlo, usando el mal llamado Uri.GetLeftPart() método.

Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string output = url.GetLeftPart(UriPartial.Authority);

Hay un problema GetLeftPart(), sin embargo.Si el puerto es el puerto predeterminado para el esquema, lo eliminará.Dado que el puerto 80 es el puerto predeterminado para http, la salida de GetLeftPart() en mi ejemplo anterior será http://www.mywebsite.com.

Si el número de puerto hubiera sido distinto de 80, se incluiría en el resultado.

Bueno, si está haciendo esto en ASP.NET o tiene acceso a httpcontext.current.request, diría que son formas más fáciles y más generales de obtenerlos:

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

Espero que esto ayude.:)

Una forma más estructurada de conseguirlo es utilizar UriBuilder.Esto evita la manipulación directa de cadenas.

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

Request.Url le devolverá el uri de la solicitud.Una vez que tengas eso, podrás recuperar prácticamente todo lo que quieras.Para conocer el protocolo llame al Esquema propiedad.

Muestra:

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

Espero que esto ayude.

Una forma aún más corta, puede requerir ASP.Net más nuevo:

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

La enumeración UriComponents le permite especificar qué componentes del URI desea incluir.

Muy similar a la respuesta de Holger.Si necesita obtener la URL, puede hacer 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

El clase uri proporciona una amplia gama de métodos, muchos de los cuales no he enumerado.

En mi caso, necesitaba agarrar LocalHost junto con Port Number, entonces esto es lo que hice:

var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 

Que agarró con éxito: http://localhost:12345

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top