当我使用这个URL时:
http://www.domain.com/Dashboard/Admin/Index我的页面按预期工作。Dashboard是一个MVC领域,Admin是控制器,Index是视图。
如果我删除区域名称,如下所示:
http://www.domain.com/Admin/Index然后,我得到以下错误:

这只是一种期待,难道不是404吗?
为什么MVC仍然成功地定位控制器并试图在我没有指定区域的情况下找到视图?
如何在不包括区域时强制它返回404?
我尝试过更改名称空间,但这并没有什么不同。
发布于 2013-08-27 04:30:23
默认情况下,内置控制器工厂将发现所有匹配控制器的实现,而不管名称空间如何。而视图引擎将在请求的上下文中搜索关联的视图(也就是说,如果区域路由没有匹配,则不会在区域中搜索)。简而言之,您需要将路由引擎定义限制为仅在“已定义的”命名空间中搜索,然后抛出404。
这是通过使用MapRoute方法的重载和传递名称空间来实现的:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
null, // object constraints
new string[] { "Namespace.Application.Controllers" } // namespaces
);为了测试控制器工厂如何使用同名的多个控制器,请尝试将另一个AdminController添加到根控制器文件夹中,然后运行相同的请求。
https://stackoverflow.com/questions/18455401
复制相似问题