2008-12-08 6 views
21

Estoy escribiendo un método de ayuda para ASP.NET MVC y necesito llamar a Url.Content para obtener una URL adecuada para el contexto. Sin embargo, para crear un nuevo UrlHelper() necesito obtener el RequestContext actual (System.Web.Routing.RequestContext para ser preciso) y no estoy seguro de cómo obtenerlo. ¿Nadie sabe?¿Cómo se obtiene acceso al System.Web.Routing.RequestContext actual dentro de un método de ayuda personalizado en ASP.NET MVC?

+1

La ubicación contexto dependerá de lo que el método de extensión se extenderá. ¿Esto se usará en una vista, controlador o en otro lugar? –

Respuesta

17

Noté que esto aún no fue respondido. A partir de MVC 1.0 puede hacer:

public static string NewHelperMethod(this HtmlHelper helper) 
{ 
    UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext); 
+1

Quería saber cómo hacer esto desde el controlador, esta respuesta me dio suficiente información para descubrir que quería ControllerContext.RequestContext. – lambacck

1

No cree uno nuevo. Sólo extender el UrlHelper existente, al igual que lo extiendes HtmlHelper:

public static string IdLink(this UrlHelper helper, Guid id) 
    { //... 

Si tiene que usar tanto HtmlHelper y UrlHelper, pasar a uno de ellos como ("este" no-) argumento regular.

1

Como se mencionó anteriormente, simplemente extienda el HtmlHelper y el contexto quedará expuesto de esa manera. Por ejemplo:

public static string ExtensionMethodName(this HtmlHelper html,object o) 
    { 
     html.ViewContext.HttpContext.Request.Uri ... etc  
    } 
3

Es posible que haya encontrado una respuesta en otro lugar, pero aquí va;

En una acción del controlador, se puede llegar a la RequestContext actual de este modo:

public ActionResult SomeAction(){ 
    var helper = new UrlHelper(this.ControllerContext.RequestContext); 
    ... 
} 
46

Si la corriente IHttpHandler es MvcHandler, puede utilizar

((MvcHandler)HttpContext.Current.Handler).RequestContext 
+0

Esto es realmente lo que necesitaba ... de un contexto verdaderamente estático – Kevin

+0

¡Me salvó el día, muchas gracias! –

Cuestiones relacionadas