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