我有一个MVC应用程序,有几个方面。每个区域以及根都有一个HomeController。
/Home/Index
/Admin/Home/Index
/Content/Home/Index
所有这些工作正常并正确地确定使用哪个家庭控制器。
我的问题是每个区域也有ReportsController,但根没有。
/Admin/Reports/Index
/Content/Reports/Index
这两个都按预期工作,但我得到了#34;找到了与控制器匹配的多种类型" url / Reports / Index的错误。它在默认路线上匹配,但溢出到区域。我的假设是它应该是404,就像去往所有区域的路线一样。
我的路线配置如下:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "Website.Controllers" }
);
context.MapRoute(
"Content",
"Content/{controller}/{action}/{id}",
new { action = "Index", controller = "Home", id = UrlParameter.Optional },
namespaces: new[] { "Website.Areas.Content.Controllers" }
);
context.MapRoute(
"Admin",
"Admin/{controller}/{action}/{id}",
new { action = "Index", controller = "Home", id = UrlParameter.Optional },
namespaces: new[] { "Website.Areas.Admin.Controllers" }
);
问题路径(/ Reports / Index)在默认路由映射上是匹配的,但它不仅限于Website.Controllers定义的命名空间,它也在查看区域。相反,它应该将其搜索限制为Website.Controllers,并在它没有在那里找到ReportsController时返回404.
答案 0 :(得分:4)
如以下帖子所述,名称空间用于确定优先级,但可以通过禁用回退查找来限制,如下所示:
routes.MapRoute(...).DataTokens["UseNamespaceFallback"] = false;
http://bubblogging.wordpress.com/2012/06/09/mvc-routing-namespaces/