文章目錄
ASP.NET Core 中 Controller 與 ControllerBase 的差別
之前筆記 ASP.NET Core 中 AddMvc() 與 AddMvcCore() 的差別 提到 AddMvc() 與 AddMvcCore() 的差別,今天剛好在整理如何從 Empty 專案加入 Web API 時聯想到似乎沒有很清楚實際差別,趁著自己查資料,順手筆記一下
基本環境說明
- macOS Mojave 10.14.5
- .NET Core SDK 2.2.107 (.NET Core Runtime 2.2.5)
ControllerBase
完整程式碼請參考 AspNetCore/src/Mvc/Mvc.Core/src/ControllerBase.cs
- 部份程式碼 - /// <summary> /// A base class for an MVC controller without view support. /// </summary> [Controller] public abstract class ControllerBase { private ControllerContext _controllerContext; private IModelMetadataProvider _metadataProvider; private IModelBinderFactory _modelBinderFactory; private IObjectModelValidator _objectValidator; private IUrlHelper _url; ....
- 是 abstract class 
- 非 View 相關的 MVC 核心操作皆定義於此 
Controller
完整程式碼請參考 AspNetCore/src/Mvc/Mvc.ViewFeatures/src/Controller.cs
- 部份程式碼 - /// <summary> /// A base class for an MVC controller with view support. /// </summary> public abstract class Controller : ControllerBase, IActionFilter, IAsyncActionFilter, IDisposable { private ITempDataDictionary _tempData; private DynamicViewData _viewBag; private ViewDataDictionary _viewData; ....
- 是 abstract class 且繼承自 - ControllerBase
- 比 - ControllerBase多了 View 相關支援
心得
- Controller繼承自- ControllerBase
- Controller比- ControllerBase多了 View 相關的支援- View
- PartialView
- ViewComponent
- Json (JsonResult)
 
- Controller比- ControllerBase多了- TempData
- ViewData
- ViewBag
 
由上述內容可以發現,如果只是單純使用 Web API 不會使用到 View 相關功能,應該在建立 Controller 時就繼承自 ControllerBase 而非 Controller
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
 Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。
