我的理解是,如果核心mvc(是MVC 6)控制器以“控制器”或结尾,则它们可以从Controller
类派生。至少有一个地方在网络上声明这是http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/如何在不添加“控制器”后缀的情况下使控制器在核心mvc中可发现?
但是在我对一个非常基本的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();
}
}
那是预期的行为?是否可以更改它,以便从Controller
派生的类可以在没有“控制器”后缀的情况下被发现?
我不确定是否有内置的方式来做到这一点,但是您可以始终从'DefaultControllerFactory'继承并覆盖'GetControllerType'来以任何您想要的方式解析您的控制器(如果没有的话)。 http://www.codeproject.com/Tips/732449/Understanding-and-Extending-Controller-Factory-i –
@BradleyUffner谢谢,我试着去追求你的建议,但我看不到'DefaultControllerFactory'有一个'GetControlerType'方法。我在这里查看源代码:https://github.com/aspnet/Mvc/blob/release/src/Microsoft.AspNetCore.Mvc.Core/Controllers/DefaultControllerFactory.cs我在错误的地方看? –
啊,我错过了这是.net核心。我没有太多的经验,有些事情看起来像从以前的版本略有改变。快速浏览一下你链接的代码使我认为它仍然可以工作,但是重写'CreateController'。或者可能会混淆传入工厂的'IControllerActivator'实现。 –