2

我写了一个自定义路由处理程序。因为我在我的网站与控制器名称相冲突的地区,我得到的错误:发现多个类型匹配控制器命名...如何在MVC3的自定义路由处理程序中指定命名空间?

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

我曾尝试以下,其中没有工作:

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

+0

只是检查,你是否在将值添加到'DataTokens'后调用'base.GetHttpHandler'? –

+0

是的,我是。我会将这添加到我的问题中。 – user1092572

+0

您是否使用自定义控制器工厂?或默认的'BaseControllerFactory'? –

回答

12

OMG,我很笨。

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

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