2011-02-05 28 views
15

¿Cómo obtengo el host sin usar Request? Este código se puede colocar en un controlador:ASP.NET MVC obtener el host actual

return String.Equals(this.Request.Url.Host, absoluteUri.Host, StringComparison.OrdinalIgnoreCase); 

pero me estoy moviendo hacia fuera de un controlador y la necesidad de encontrar otra manera de reemplazar este this.Request.Url.Host.

Todo mi propósito es tener acceso a este método en una clase de ayuda:

Url.IsLocalUrl(returnUrl); 

Mi método de ayuda se verá así:

public static string GetLocalUrl(string url) 
{ 
    if(Url.IsLocalUrl()){ 
     return url; 
    } 
    else{ 
     return Action("Security", "Home"); 
    } 
} 

Respuesta

10

o bien utilizar HttpContext.Current.Request, o inyectar una instancia de HttpContextBase en lo que sea que necesite esta información. Recomendaría la opción 2 porque, entonces, puede probar fácilmente este otro componente. Dado que HttpContextBase se puede burlar/troquelar.

+1

Pero, cómo estar cuando recibo una excepción: 'System.Web.HttpException: La solicitud no está disponible en este contexto' ? –

17

Se puede utilizar esta fuera de un controlador:

System.Web.HttpContext.Current.Request.Url 
+0

Esto hizo el truco en un proyecto MVC5. Como este código estaba en un controlador, es probable que suponga que siempre habrá un contexto viable desde el que extraerlo. –

1

En el asistente de HTML que puede utilizar

htmlHelper.ViewContext.HttpContext.Request.Url 
Cuestiones relacionadas