2008-12-08 6 views
21

J'écris une méthode d'aide pour ASP.NET MVC et j'ai besoin d'appeler Url.Content pour obtenir une URL appropriée pour le contexte. Cependant, afin de créer un nouvel UrlHelper(), je dois obtenir le RequestContext actuel (System.Web.Routing.RequestContext pour être précis) et je ne sais pas comment l'attraper. Quelqu'un sait?Comment accéder au System.Web.Routing.RequestContext actuel à partir d'une méthode d'assistance personnalisée dans ASP.NET MVC?

+1

L'emplacement de contexte dépendra de ce que la La méthode d'extension va s'étendre. Est-ce que cela sera utilisé dans une vue, un contrôleur ou ailleurs? –

Répondre

17

Remarqué cela était encore sans réponse. À partir de MVC 1.0, vous pouvez faire:

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

Je voulais savoir comment faire cela à partir du contrôleur, cette réponse m'a donné assez d'informations pour comprendre que je voulais ControllerContext.RequestContext. – lambacck

1

Ne pas en créer un nouveau. Il suffit de prolonger la UrlHelper existante, tout comme vous le feriez prolongez HtmlHelper:

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

Si vous devez utiliser les deux HtmlHelper et UrlHelper, passer un d'entre eux en tant que régulier (non « ce ») argument.

1

Comme mentionné ci-dessus, il suffit d'étendre le HtmlHelper et le contexte est exposé de cette manière. Par exemple:

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

Vous avez peut-être trouvé une réponse ailleurs, mais ici;

Dans une action de contrôleur, vous pouvez accéder à la RequestContext actuelle comme ceci:

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

Si le IHttpHandler actuel est MvcHandler, vous pouvez utiliser

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

C'est en fait ce dont j'avais besoin ... d'un contexte vraiment statique – Kevin

+0

Sauvé ma journée, merci beaucoup! –

Questions connexes