【发布时间】:2016-08-14 22:50:51
【问题描述】:
我的理解是,如果核心 mvc(原为 MVC 6)控制器以“Controller”结尾或它们派生自 Controller 类,则可以发现它们。网络上至少有一个地方表明这是http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/
但是在我对一个非常基本的 MVC 6 RC1 网站的测试中,只有当它具有“Controller”后缀时才会发现控制器。我错过了什么吗?例如,框架发现了以下控制器:
public class HomeController : Controller
{
// GET: /<controller>/
public IActionResult Index()
{
return View();
}
}
但是这个控制器不是:
public class Home: Controller
{
// GET: /<controller>/
public IActionResult Index()
{
return View();
}
}
这是预期的行为吗?是否可以更改它以使派生自 Controller 的类在没有“Controller”后缀的情况下也可被发现?
【问题讨论】:
-
我不确定是否有内置方法可以做到这一点,但您始终可以从
DefaultControllerFactory继承并覆盖GetControllerType以任何您想要的方式解析您的控制器(如果有)吨。 codeproject.com/Tips/732449/… -
@BradleyUffner 谢谢,我已尝试采纳您的建议,但我看不到
DefaultControllerFactory有GetControlerType方法。我在看这里的源代码:github.com/aspnet/Mvc/blob/release/src/…我是不是找错地方了? -
啊,我错过了这是 .net 核心。我对此没有太多经验,有些东西看起来与以前的版本略有不同。快速浏览您链接的代码让我认为它仍然可以工作,但会覆盖
CreateController。或者可能会弄乱传入工厂的IControllerActivator实现。
标签: asp.net-core-mvc