首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在URL中不包括区域名称会导致“查看‘索引’或找不到主目录‘”,而不是404

在URL中不包括区域名称会导致“查看‘索引’或找不到主目录‘”,而不是404
EN

Stack Overflow用户
提问于 2013-08-27 01:10:48
回答 1查看 1.3K关注 0票数 0

当我使用这个URL时:

代码语言:javascript
复制
http://www.domain.com/Dashboard/Admin/Index

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

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

代码语言:javascript
复制
http://www.domain.com/Admin/Index

然后,我得到以下错误:

这只是一种期待,难道不是404吗?

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

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

我尝试过更改名称空间,但这并没有什么不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-27 04:30:23

默认情况下,内置控制器工厂将发现所有匹配控制器的实现,而不管名称空间如何。而视图引擎将在请求的上下文中搜索关联的视图(也就是说,如果区域路由没有匹配,则不会在区域中搜索)。简而言之,您需要将路由引擎定义限制为仅在“已定义的”命名空间中搜索,然后抛出404。

这是通过使用MapRoute方法的重载和传递名称空间来实现的:

代码语言:javascript
复制
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添加到根控制器文件夹中,然后运行相同的请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18455401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档