0

当我使用这个网址时:

http://www.domain.com/Dashboard/Admin/Index

我的页面按预期工作。Dashboard是一个 MVC 区域,Admin是控制器,Index是视图。

如果我删除区域名称,如下所示:

http://www.domain.com/Admin/Index

然后我收到以下错误:

服务器错误

这只是一种预期;不应该是404吗?

为什么在我不指定区域的情况下,MVC 仍然成功定位到控制器并尝试查找视图?

不包括区域时,如何强制它返回 404?

我尝试过更改名称空间,但没有任何区别。

4

1 回答 1

1

默认情况下,内置控制器工厂将查找匹配控制器的所有实现,而不管命名空间如何。而视图引擎将在请求的上下文中搜索关联的视图(即,如果区域路线未匹配,则不会在区域中搜索)。简而言之,您需要将路由引擎定义限制为仅在“已定义”命名空间中搜索,然后将抛出 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 添加到根 Controllers 文件夹,然后运行相同的请求。

于 2013-08-27T04:30:23.230 回答