我正在按照本教程创建ASP.NET Core Web API,并且在添加控制器的部分中,该教程提供了替换控制器模板代码的代码。真正引起我注意的一件事是,在模板代码中,我得到了:
TodoController : Controller
然后在本应使用的教程代码中,我发现:
[Route("api/[controller]")]
[ApiController]
TodoController : ControllerBase
我非常想知道为什么对于Web API控制器,有必要从ControllerBase
而不是Controller
派生。为什么这样做?
答案 0 :(得分:8)
对于Web API控制器,为什么必须从
bar, baz, qux, quux
而不是ControllerBase
派生。
这不是严格必要的,仅此而已。 Controller
类派生自Controller
,仅添加了一些支持View的成员。
基本上:
ControllerBase
编写API时,ControllerBase可以更好地满足您的要求,但两者都可以使用。
答案 1 :(得分:7)
从https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-3.1到
不要通过从Controller类派生来创建Web API控制器。 Controller源自ControllerBase,并添加了对视图的支持,因此它用于处理网页,而不是Web API请求。