为什么 ASP.NET Core WebAPI 继承 ControllerBase 而不是 Controller ?

本文探讨了ASP.NET Core Web API初学者常遇到的问题——为何控制器使用ControllerBase而非Controller。讲解了两者之间的关系、适用场景及ControllerBase的抽象特性,帮助理解MVC项目的控制器设计原则。
摘要由CSDN通过智能技术生成

咨询区

  • Alex Sanséau

我是 ASP.NET Core Web API 的初学者,我在跟着文档创建 Controller 时,VS模板引擎给我生成了如下 Controller 模板代码,我发现有一个奇怪的地方如下:


public class TodoController : Controller
{
}

但文档中给出的Controller模板是下面这样的。


[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{

}

对,就是 Controller 和 ControllerBase 的问题,我真的很想知道为啥要用 ControllerBase 而不是 Controller 呢?

回答区

  • Henk Holterman

其实两者并没有严格区别,如果往细处说,Controller 是继承于 ControllerBase 的,同时子类添加了一些为 MVC 中的 Views 设计的一些属性和方法,参考如下代码:


    public abstract class Controller : ControllerBase
    {
        //
        // Summary:
        //     Gets the dynamic view bag.
        public dynamic ViewBag { get; }

        public ViewDataDictionary ViewData { get; set; }
        //
        // Summary:
        //     Gets or sets Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary used by
        //     Microsoft.AspNetCore.Mvc.ViewResult.
        public ITempDataDictionary TempData { get; set; }
    }

如果你写的是 API 程序,那自然 ControllerBase 更适合需求,虽然两者都可以用。

我记得第一版MVC并没有 ControllerBase,它是后来添加的,所以这取名看起来怪怪的。

  • Mark

可以看下官方文档:https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-3.1

你应该就明白,当你想创建MVC项目时可使用 Controller 父类,如果是WebAPI项目可使用 ControllerBase 类。

另一个不同点在于,ControllerBase 是一个抽象类,所以它没有方法实现,自然也就没有Dispose方法了,这里要注意一下。

点评区

两位大佬说的很清楚了,学习了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值