variable net mvc full from domain current asp applicationpath c# asp.net code-behind httpcontext

net - httpcontext current request applicationpath c#



Request.Url.Host y ApplicationPath en una llamada (6)

Esto no estaba funcionando en mi host local con un número de puerto, por lo que hice una modificación menor:

private string GetWebAppRoot() { string host = (HttpContext.Current.Request.Url.IsDefaultPort) ? HttpContext.Current.Request.Url.Host : HttpContext.Current.Request.Url.Authority; host = String.Format("{0}://{1}", HttpContext.Current.Request.Url.Scheme, host); if (HttpContext.Current.Request.ApplicationPath == "/") return host; else return host + HttpContext.Current.Request.ApplicationPath; }

¿Hay alguna manera de obtener HttpContext.Current.Request.Url.Host y HttpContext.Current.Request.ApplicationPath en una llamada?

Algo como "url de aplicación completa"?

EDITAR: Aclaración - lo que necesito es esta la parte dentro de []:

http://[www.mysite.com/mywebapp]/Pages/Default.aspx

Pido simplemente por curiosidad.

EDIT 2: Gracias por todas las respuestas, pero ninguna de ellas era exactamente lo que estaba buscando. Para su información, resolví el problema de esta manera (pero todavía estoy interesado en saber si hay una manera más suave):

public string GetWebAppRoot() { if(HttpContext.Current.Request.ApplicationPath == "/") return "http://" + HttpContext.Current.Request.Url.Host; else return "http://" + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath; }


Gracias por todas las respuestas, pero ninguna de ellas era exactamente lo que estaba buscando. Para su información, resolví el problema de esta manera (pero todavía estoy interesado en saber si hay una manera más suave):

public string GetWebAppRoot() { if(HttpContext.Current.Request.ApplicationPath == "/") return "http://" + HttpContext.Current.Request.Url.Host; else return "http://" + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath; }


Lo que realmente debes hacer es:

return String.Format("{0}://{1}/", Request.Url.Scheme, Request.Url.Host);

De esa manera funciona si estás usando HTTPS (¡o algún otro esquema!)


Revisa este post :

public static Uri GetBaseUrl(HttpRequest request) { Uri contextUri = new Uri(request.Url, request.RawUrl); UriBuilder realmUri = new UriBuilder(contextUri) { Path = request.ApplicationPath, Query = null, Fragment = null }; return realmUri.Uri; } public static string GetAbsoluteUrl(HttpRequest request, string relativeUrl) { return new Uri(GetBaseUrl(request), VirtualPathUtility.ToAbsolute(relativeUrl)).AbsoluteUri; }

Si no obtiene lo que necesita directamente de GetBaseUrl, debe ser posible:

GetAbsoluteUrl(HttpContext.Current.Request, "/")


public static string GetSiteRoot() { string port = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_PORT"]; if (port == null || port == "80" || port == "443") port = ""; else port = ":" + port; string protocol = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"]; if (protocol == null || protocol == "0") protocol = "http://"; else protocol = "https://"; string sOut = protocol + System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + port + System.Web.HttpContext.Current.Request.ApplicationPath; if (sOut.EndsWith("/")) { sOut = sOut.Substring(0, sOut.Length - 1); } return sOut; }


HttpContext.Current.Request.Url.AbsoluteUri