如何从ASP.NET MVC中的自定义帮助器方法中访问当前的System.Web.Routing.RequestContext?

时间:2008-12-08 22:21:28

标签: asp.net asp.net-mvc

我正在为ASP.NET MVC编写一个帮助方法,我需要调用Url.Content来获取上下文的适当URL。但是,为了创建新的UrlHelper(),我需要获得当前的RequestContextSystem.Web.Routing.RequestContext来确切)并且我不确定如何抓住它。有人知道吗?

5 个答案:

答案 0 :(得分:46)

如果当前的IHttpHandler是MvcHandler,则可以使用

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

答案 1 :(得分:19)

注意到这仍然没有答案。从MVC 1.0开始,您可以这样做:

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

答案 2 :(得分:3)

你可能在其他地方找到了答案,但是这里可以找到;

在控制器操作中,您可以像这样访问当前的RequestContext:

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

答案 3 :(得分:2)

如上所述,只需扩展HtmlHelper,就会以这种方式暴露上下文。例如:

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

答案 4 :(得分:1)

不要创建新的。只需扩展现有的UrlHelper,就像扩展HtmlHelper一样:

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

如果必须同时使用HtmlHelper和UrlHelper,请将其中一个作为常规(非“this”)参数传递。