如何在MVC3的自定义路由处理程序中指定命名空间?

时间:2011-12-11 18:39:15

标签: asp.net-mvc namespaces asp.net-mvc-routing asp.net-mvc-areas mvcroutehandler

我写了一个自定义路由处理程序。因为我的网站中有控制器名称冲突的区域,我收到错误:发现多个类型与名为...的控制器匹配...

我想我需要在处理程序中指定一个命名空间,对吧?

我尝试了以下方法,但没有一项工作:

public class MyRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {

        (... complicated DB lookups and "re-writing" of requestContext.RouteData.Values["controller"] ...)

        // doesn't work
        requestContext.RouteData.Values["namespaces"] = new[] { "Site.Contollers" };

        // doesn't work
        requestContext.RouteData.DataTokens.Add("namespaces", new[] { "Site.Contollers" });

        // doesn't work
        requestContext.RouteData.Values["namespaces"] = "Site.Contollers";

        // doesn't work
        requestContext.RouteData.DataTokens.Add("namespaces", "Site.Contollers");

        (... snip ...)

        return base.GetHttpHandler(requestContext);
    }
}

正确的方法是什么?

注意:因为我的处理程序执行数据库查找并根据结果选择不同的控制器,所以我不能在我的Global.asax.cs文件中使用基本的MapRoute()方法(据我所知)。

1 个答案:

答案 0 :(得分:12)

天啊,我很蠢。

我拼错了“控制器”。正确答案是:

requestContext.RouteData.DataTokens.Add("namespaces", new string[] { "Site.Controllers" });