在ASP.net MVC中,为什么控制器可以移动到Controllers文件夹之外

Cyr*_*ril 0 asp.net-mvc controller asp.net-mvc-5.2

错误地,我在Models文件夹中创建了我的HomeController.cs.这是我的webapplication的唯一控制器.视图路径为:Views/Home/Index.cshtml

当我运行应用程序时,没有问题,它可以找到控制器.我也尝试将它移动到像Views/Home/HomeController.cs这样的子文件夹,但仍然没有问题.

我找不到一个路由或配置,告诉应用程序控制器在哪里,所以我想知道它是如何工作的......

Pau*_*ott 7

MVC查找Controller在尝试将路由与控制器匹配时继承的任何内容,控制器所在的位置或控制器所在的命名空间无关紧要.

对于一个有趣的小实验,这将生成错误"发现多个类型匹配名为'Home'的控制器......",因为在不同的命名空间中有两个具有相同名称的控制器,并且MVC不知道哪一个到使用.

namespace Something
{
    public class HomeController : Controller
    {
        public ActionResult Index()...
    }  
}

namespace OrOther
{
    public class HomeController : Controller
    {
        public ActionResult Index()...
    }  
}
Run Code Online (Sandbox Code Playgroud)