ASP.NET MVC中控制器的内置基类:Controller或ControllerBase?

时间:2015-10-03 19:40:12

标签: c# .net asp.net-mvc

ASP.NET MVC中控制器的内置基类是什么:

System.Web.Mvc.Controller或System.Web.Mvc.ControllerBase?

在Google上搜索后我不清楚:

  1. www.ASP.NET:"控制器是一个派生自System.Web.Mvc.Controller基类的类。"

  2. On codeproject:"抽象ControllerBase类表示所有MVC控制器的基类。"

  3. 在MSDN上:"所有控制器的基类是ControllerBase类,它提供了一般的MVC处理。 Controller类继承自ControllerBase,是控制器的默认实现。"

  4. 在书&#34; Pro ASP.NET MVC 5 Framework&#34;来自Adam Freeman:&#34;在ASP.NET MVC中,控制器只是C#类(通常继承自System.Web.Mvc.Controller,即框架的内置控制器基类)。&#34; < / p>

  5. 谁是对的?什么&#34;内置基类&#34;在这种情况下是什么意思? 是&#34;控制器&#34;内置的基类和&#34; ControllerBase&#34; ???? (什么是正确的措辞?)基类?

4 个答案:

答案 0 :(得分:8)

Controller是您应该从中实现自己的MVC控制器的类。 ControllerBaseController派生,并且与任何抽象类一样,它不向Controller的某些成员提供实现。

此外,Controller的成员数量多于ControllerBase(例如,它缺少View()以及许多其他人可能习惯于在常规控制器中调用!)。< / p>

实际上,ControllerBase是一个基础结构类,它不适合直接用于实现自己的控制器。

答案 1 :(得分:1)

ASP MVC要求所有控制器都实现IController接口。控制器不需要从ControllerControllerBase类派生。

您可以在Adam Freeman的书中找到实现IController界面的自定义控制器的示例。

ControllerBase类实现IController接口并添加了几个方法和属性(例如ViewBag)。它定义了一个抽象的ExecuteCore方法,负责定位操作方法并执行它。如果您选择从ControllerBase派生控制器,则必须提供此方法的实现。

Controller类派生自ControllerBase。它提供了ExecuteCore方法的实现,并添加了几个可以在控制器中使用的有用方法(例如View()Redirect()等。)。

总结一下 - ControllerBaseController都是控制器的内置基类。内置,因为它们是ASP.NET MVC框架的一部分。控制器的基类,因为如果你从它们派生,你将创建一个控制器。

答案 2 :(得分:1)

按定义

ControllerBase:不支持视图的MVC控制器的基类。

Controller:具有视图支持的MVC控制器的基类。

因此,如果我们不创建视图,即创建Web API,请使用ControllerBase,否则请使用Controller。

答案 3 :(得分:0)

Controller类是ControllerBase的包装器,它为常规使用框架提供内置功能,尤其是处理HTTP请求的方法。

您可以将ControllerBase视为一个类,指定控制器需要执行的最低要求。它实现了具有Execute操作的IController接口。这是控制器应该从框架的角度来执行的基本功能:执行传入请求。

对于普通用户,选择肯定是Controller,它继承自ControllerBase并且所有构建都支持常规用途。