我的理解是,如果核心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'實現。 –