registrados puertos puerto protocolos protocolo lista funciones conocidos capa bien aplicacion .net asp.net url uri authority

.net - protocolos - puertos registrados



.NET-Obtener protocolo, host y puerto (7)

A pesar de que @Rick tiene la respuesta aceptada para esta pregunta, en realidad hay una forma más corta de hacerlo, utilizando el método Uri.GetLeftPart() llama mal.

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

Sin embargo, hay una captura para GetLeftPart() . 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.

¿Existe una forma sencilla en .NET para 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 volver

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 análisis fuera de la cadena de URL.

¿Alguna sugerencia?


Aún más corto, puede requerir ASP.Net más reciente:

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

La enumeración de UriComponents le permite especificar qué componente (s) de la URI que desea incluir.


Bueno, si estás haciendo esto en Asp.Net o tienes acceso a HttpContext.Current.Request, diría que estas son formas más sencillas y 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. :)


El siguiente código (C #) debería hacer el truco

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


Muy similar a la respuesta de Holger. Si necesitas agarrar la URL puedes 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

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

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

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

Que se capturó con éxito: http://localhost:12345


Request.Url le devolverá el Uri de la solicitud. Una vez que tienes eso, puedes recuperar casi cualquier cosa que quieras. Para obtener el protocolo, llame a la propiedad Scheme .

Muestra:

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

Espero que esto ayude.


Una forma más estructurada de obtener esto es usar UriBuilder. Esto evita la manipulación directa de la cadena.

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