obtener navegador mvc domain current asp c# asp.net uri httprequest

navegador - request absolute url c#



¿Cómo puedo obtener la base del sitio? (11)

¿podría agregar el puerto para el puerto 80 / SSL?

algo como:

if (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "80" && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "443") { port = String.Concat(":", HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString()); }

y usar eso en el resultado final?

Quiero escribir un pequeño método de ayuda que devuelve la URL base del sitio. Esto es lo que se me ocurrió:

public static string GetSiteUrl() { string url = string.Empty; HttpRequest request = HttpContext.Current.Request; if (request.IsSecureConnection) url = "https://"; else url = "http://"; url += request["HTTP_HOST"] + "/"; return url; }

¿Hay algún error en esto que puedas pensar? ¿Alguien puede mejorar esto?


Basado en lo que escribió Warlock, descubrí que la raíz de la ruta virtual es necesaria si no estás alojado en la raíz de tu web. (Esto funciona para los controladores de la API web de MVC)

String baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) + Configuration.VirtualPathRoot;


Creo que las respuestas anteriores no tienen en cuenta cuando el sitio no está en la raíz del sitio web.

Este es un controlador de WebApi:

string baseUrl = (Url.Request.RequestUri.GetComponents( UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd(''/'') + HttpContext.Current.Request.ApplicationPath).TrimEnd(''/'') ;


Este es un método mucho más infalible.

VirtualPathUtility.ToAbsolute("~/");


Esto funciona para mí

Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;

  • Request.Url.OriginalString : devuelve la ruta completa igual que muestra el navegador.
  • Request.Url.PathAndQuery : devuelve el (ruta completa) - (nombre de dominio + PUERTO).
  • Request.ApplicationPath : devuelve "/" en el servidor alojado y "nombre de la aplicación" en el despliegue IIS local.

Por lo tanto, si desea acceder a su nombre de dominio, considere incluir el nombre de la aplicación en caso de:

  1. Implementación de IIS
  2. Si su aplicación se implementó en el subdominio.

Estoy usando el siguiente código de Application_Start

String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);


La popular solución GetLeftPart no es compatible con la versión PCL de Uri , desafortunadamente. GetComponents es, sin embargo, si necesita portabilidad, esto debería ser el truco:

uri.GetComponents( UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.Unescaped);


Para mí, @ warlock''s parece ser la mejor respuesta hasta ahora, pero siempre he usado esto en el pasado;

string baseUrl = Request.Url.GetComponents( UriComponents.SchemeAndServer, UriFormat.UriEscaped)

O en un controlador WebAPI;

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

que es útil para que pueda elegir el formato de escape que desea. No estoy seguro de por qué hay dos implementaciones tan diferentes, y hasta donde puedo decir, este método y @ warlock devuelven exactamente el mismo resultado en este caso, pero parece que GetLeftPart() también funcionaría para servidores como Uri. etiquetas de mailto por ejemplo.


Prueba esto:

string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd(''/'') + "/";


voy con

HttpContext.Current.Request.ServerVariables["HTTP_HOST"]


string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority)

Eso es ;)