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

Asp.net mvc 如何在MVC3的自定义路由处理程序中指定命名空间?,asp.net-mvc,namespaces,asp.net-mvc-routing,asp.net-mvc-areas,mvcroutehandler,Asp.net Mvc,Namespaces,Asp.net Mvc Routing,Asp.net Mvc Areas,Mvcroutehandler,我已经编写了一个自定义路由处理程序。由于我的网站中有控制器名称冲突的区域,因此出现错误:找到了多个与控制器名称匹配的类型 我想我需要在我的处理程序中指定一个名称空间,对吗 我尝试了以下方法,但均无效: public class MyRouteHandler : MvcRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { (...

我已经编写了一个自定义路由处理程序。由于我的网站中有控制器名称冲突的区域,因此出现错误:找到了多个与控制器名称匹配的类型

我想我需要在我的处理程序中指定一个名称空间,对吗

我尝试了以下方法,但均无效:

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()方法(据我所知)。

OMG,我很笨

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

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

只是检查一下,在将值添加到
DataTokens
之后,您是否正在调用
base.GetHttpHandler
?是的,我正在调用。我将把这个添加到我的问题中。您是否使用自定义控制器工厂?或者默认的
BaseControllerFactory
?我使用的是默认的工厂。