我正在按照本教程创建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,后来又将其插入。因此,命名/继承有些奇怪。

10-06 11:03