为什么 ASP.NET Core WebAPI 继承 ControllerBase 而不是 Controller ?
咨詢區(qū)
Alex Sanséau:
我是 ASP.NET Core Web API 的初學(xué)者,我在跟著文檔創(chuàng)建 Controller 時(shí),VS模板引擎給我生成了如下 Controller 模板代碼,我發(fā)現(xiàn)有一個(gè)奇怪的地方如下:
public?class?TodoController?:?Controller { }但文檔中給出的Controller模板是下面這樣的。
[Route("api/[controller]")] [ApiController] public?class?TodoController?:?ControllerBase {}對(duì),就是 Controller 和 ControllerBase 的問題,我真的很想知道為啥要用 ControllerBase 而不是 Controller 呢?
回答區(qū)
Henk Holterman:
其實(shí)兩者并沒有嚴(yán)格區(qū)別,如果往細(xì)處說,Controller 是繼承于 ControllerBase 的,同時(shí)子類添加了一些為 MVC 中的 Views 設(shè)計(jì)的一些屬性和方法,參考如下代碼:
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
你應(yīng)該就明白,當(dāng)你想創(chuàng)建MVC項(xiàng)目時(shí)可使用 Controller 父類,如果是WebAPI項(xiàng)目可使用 ControllerBase 類。
另一個(gè)不同點(diǎn)在于,ControllerBase 是一個(gè)抽象類,所以它沒有方法實(shí)現(xiàn),自然也就沒有Dispose方法了,這里要注意一下。
點(diǎn)評(píng)區(qū)
兩位大佬說的很清楚了,學(xué)習(xí)了。
總結(jié)
以上是生活随笔為你收集整理的为什么 ASP.NET Core WebAPI 继承 ControllerBase 而不是 Controller ?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【DotNetMLLearn】.NET
- 下一篇: 设计模式之模板方法