如何在没有添加" Controller"的情况下使核心mvc中的控制器可被发现。后缀?

时间:2016-04-21 15:48:44

标签: asp.net-core-mvc

我的理解是核心mvc(是MVC 6)控制器如果以#34; Controller" OR 来自Controller类。网络上至少有一个地方表明了这一点http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/

但是在我对一个非常基本的MVC 6 RC1网站的测试中,只有控制器有一个"控制器"后缀。我错过了什么吗?例如,框架发现了以下控制器:

public class HomeController : Controller
{
    // GET: /<controller>/
    public IActionResult Index()
    {
        return View();
    }
}

但是这个控制器不是:

public class Home: Controller
{
    // GET: /<controller>/
    public IActionResult Index()
    {
        return View();
    }
}

这是预期的行为吗?是否可以更改,以便在没有&#34; Controller&#34;的情况下可以发现源自Controller的类。后缀?

1 个答案:

答案 0 :(得分:0)

经过进一步的研究,我意识到我错了。或者说我误解了我所看到的内容。

如果实际上控制器名为Home,如我的示例中所列,并且它继承自Controller,它将被框架视为Controller,并且会在route需要一个名为Home的控制器。

在我的情况下,我实际上想要命名我的控制器HomeCtlr而不是HomeController但这不起作用但不是因为框架没有将其识别为控制器。真正的问题是它匹配的路由需要名为HomeCtlr的控制器而不是名为Home的控制器。所以最后我意识到我正在考虑这个错误并提出了错误的问题。

所以我问的问题的实际答案是,任何继承自Controller类的类都将被框架视为控制器。否&#34;控制器&#34;需要后缀。但请注意,您不能添加其他缩写后缀,因为当匹配到该控制器的路由时,它将被视为控制器名称的一部分(当然这非常有意义!)Duh!