ASP.NET MVC中控制器的内置基类是什么:
System.Web.Mvc.Controller或System.Web.Mvc.ControllerBase?
在Google上搜索后我不清楚:
在www.ASP.NET:"控制器是一个派生自System.Web.Mvc.Controller基类的类。"
On codeproject:"抽象ControllerBase类表示所有MVC控制器的基类。"
在MSDN上:"所有控制器的基类是ControllerBase类,它提供了一般的MVC处理。 Controller类继承自ControllerBase,是控制器的默认实现。"
在书&#34; Pro ASP.NET MVC 5 Framework&#34;来自Adam Freeman:&#34;在ASP.NET MVC中,控制器只是C#类(通常继承自System.Web.Mvc.Controller,即框架的内置控制器基类)。&#34; < / p>
谁是对的?什么&#34;内置基类&#34;在这种情况下是什么意思? 是&#34;控制器&#34;内置的基类和&#34; ControllerBase&#34; ???? (什么是正确的措辞?)基类?
答案 0 :(得分:8)
Controller
是您应该从中实现自己的MVC控制器的类。 ControllerBase
由Controller
派生,并且与任何抽象类一样,它不向Controller
的某些成员提供实现。
此外,Controller
的成员数量多于ControllerBase
(例如,它缺少View()
以及许多其他人可能习惯于在常规控制器中调用!)。< / p>
实际上,ControllerBase
是一个基础结构类,它不适合直接用于实现自己的控制器。
答案 1 :(得分:1)
ASP MVC要求所有控制器都实现IController
接口。控制器不需要从Controller
或ControllerBase
类派生。
您可以在Adam Freeman的书中找到实现IController
界面的自定义控制器的示例。
ControllerBase
类实现IController
接口并添加了几个方法和属性(例如ViewBag
)。它定义了一个抽象的ExecuteCore
方法,负责定位操作方法并执行它。如果您选择从ControllerBase
派生控制器,则必须提供此方法的实现。
Controller
类派生自ControllerBase
。它提供了ExecuteCore
方法的实现,并添加了几个可以在控制器中使用的有用方法(例如View()
,Redirect()
等。)。
总结一下 - ControllerBase
和Controller
都是控制器的内置基类。内置,因为它们是ASP.NET MVC框架的一部分。控制器的基类,因为如果你从它们派生,你将创建一个控制器。
答案 2 :(得分:1)
按定义
ControllerBase:不支持视图的MVC控制器的基类。
Controller:具有视图支持的MVC控制器的基类。
因此,如果我们不创建视图,即创建Web API,请使用ControllerBase,否则请使用Controller。
答案 3 :(得分:0)
Controller
类是ControllerBase
的包装器,它为常规使用框架提供内置功能,尤其是处理HTTP请求的方法。
您可以将ControllerBase
视为一个类,指定控制器需要执行的最低要求。它实现了具有Execute操作的IController接口。这是控制器应该从框架的角度来执行的基本功能:执行传入请求。
对于普通用户,选择肯定是Controller
,它继承自ControllerBase
并且所有构建都支持常规用途。