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