我正在按照本教程创建ASP.NET Core Web API,并且在添加 Controller 的部分中,该教程提供了用于替换 Controller 模板代码的代码。真正引起我注意的一件事是,在模板代码中,我得到了:
TodoController : Controller
然后,在本教程代码中,我应该使用它代替:
[Route("api/[controller]")]
[ApiController]
TodoController : ControllerBase
我非常想知道为什么对于Web API Controller ,必须从
ControllerBase
而不是Controller
派生。为什么要这样做? 最佳答案
并非严格必要,仅此而已。 Controller
类派生自ControllerBase
,并添加了一些支持View的成员。
基本上:
public class Controller : ControllerBase
{
public dynamic ViewBag { get; }
public virtual ViewResult View(object model) { }
// more View support stuff
}
当您编写API时,ControllerBase可以更好地满足您的要求,但是两者都可以使用。我似乎记得在最初的MVC迭代中没有ControllerBase,后来又将其插入。因此,命名/继承有些奇怪。