Este dilema se puede tratar de diversas formas, pero en este caso te dejamos la respuesta más completa para nosotros.
Solución:
Suponiendo que tiene un objeto Solicitud disponible, puede usar:
string.Format("0://12", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
Si no está disponible, puede acceder a él a través del contexto:
var request = HttpContext.Current.Request
Entonces, ninguno de los enumerados aquí funcionó para mí, pero usando algunas de las respuestas, obtuve algo que funcionaba:
public string GetBaseUrl()
var request = HttpContext.Current.Request;
var appUrl = HttpRuntime.AppDomainAppVirtualPath;
if (appUrl != "/")
appUrl = "/" + appUrl;
var baseUrl = string.Format("0://12", request.Url.Scheme, request.Url.Authority, appUrl);
return baseUrl;
Actualización para ASP.NET Core/MVC 6:
ASP.NET Core
hace que este proceso sea un poco más doloroso, especialmente si está en lo profundo de su código. Tienes 2 opciones para llegar al HttpContext
1) Pásalo desde tu controller
:
var model = new MyClass(HttpContext);
entonces en model
:
private HttpContext currentContext;
public MyClass(HttpContext currentContext)
this.currentContext = currentContext;
2) Quizás la forma más limpia es inyectarlo en su clase, lo que comienza registrando los tipos en su Startup:
public void ConfigureServices(IServiceCollection services)
// Add framework services.
services.AddMvc();
services.AddTransient();
services.TryAddSingleton();
luego haz que te lo inyecten así:
private HttpContext currentContext;
public MyClass(IHttpContextAccessor httpContextAccessor)
currentContext = httpContextAccessor.HttpContext;
en cualquier caso, aquí está la actualización para .NET Core
GetBaseUrl()
:
public string GetBaseUrl()
var request = currentContext.Request;
var host = request.Host.ToUriComponent();
var pathBase = request.PathBase.ToUriComponent();
return $"request.Scheme://hostpathBase";
En codigo:
Url.Content("~/");
Sintaxis de maquinilla de afeitar MVC3:
@Url.Content("~/")
Acuérdate de que te damos el privilegio valorar este ensayo si chocaste tu enigma .