AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别
1.services.AddMvcCore()
只注册运行 Controller/Razor Pages 必要的核心服务,确保 Pipeline 程序可动作,其馀如像 Data Annotation Model Validation、身分验证等服务要自己加挂,除有特殊客制需求,一般不太常用。
2.services.AddControllers()
包含 AddMvcCore() 所做的动作外,再加上:
- 身分验证服务
Swagger/Open API等 API 文件动态产生功能Data Annotation- 支援Attribute资料检核及IValidateObjectFormatter Mapping- 依Request需求提供不同格式(JSON/XML)内容CORS- 支援跨网域整合
要用 Controller 但不会用到 View,例如纯 WebAPI,可以选这个。
3.services.AddRazorPages()
包含 AddMvcCore() 所有功能,再加上:
Razor Pages功能- 身分验证服务
Data Annotation- 支援Attribute资料检核及IValidateObjectCache Tag Helper
4.services.AddControllersWithViews()
包含 AddControllers() 的所有项目,再加上:
cshtml Razor ViewCache Tag Helper
要使用标准 Model + View + Controller 架构,通常就选这个。
5.services.AddMvc()
等于 AddControllersWithViews() 加 AddRazorPages(),不想漏掉功能发挥 ASP.NET Core 最大威力,选这个就对了。
AddMvc/AddMvcCore/AddControllers等区别
比较一下AddMvc、AddMvcCore、AddController等在服务配置时的区别及各自拥有的功能。
1.services.AddMvcCore()
只注册路由请求和执行控制器所必要的核心服务,确保 Pipeline 程序可运转。除非是有能力并想完全去自主DIY,一般不建议直接使用这个。
2.services.AddControllers()
除包含了 AddMvcCore() 所有功能,再加上:
AuthorizationApiExplorerData AnnotationFormatter MappingCORS
要用 Controller 但不用View,新建WebAPI时,默认采用的就是这个,使用这个时,与SwashBuckle配合时,无需再额外引入ApiExplorer,自身已经依赖。
3.services.AddRazorPages()
包含 AddMvcCore() 所有功能,再加上:
- Razor Pages
- Authorization
- Data Annotation
- Cache Tag Helper
4.services.AddControllersWithViews()
包含 AddControllers() 所有功能,再加上:
- cshtml和Razor View
- Cache Tag Helper
标准MVC模式,常用Razor视图,使用这个就够了
5.services.AddMvc()
包含 AddControllersWithViews() 及 AddRazorPages() 功能。 包含的功能最为齐全,如果不想遗漏功能,直接使用这个就行

AddController vs AddMvc vs AddControllersWithViews vs AddRazorPages

AddController vs AddMvc vs AddControllersWithViews vs AddRazorPages
在本文中,我将讨论 ASP.NET Core 应用程序中的 AddController()、AddMvc()、AddControllersWithViews() 和 AddRazorPages() 方法。 我们还将讨论何时使用 ASP.NET Core 中的哪些方法。
ASP.NET Core 中可用的不同方法:
如果转到 AddMvc() 扩展方法的定义,除了 AddMvc() 方法外,还有其他方法(AddController()、AddControllersWithViews() 和 AddRazorPages())可用,如下图所示。 所有这些方法都作为 IServiceCollection 接口上的扩展方法实现。

让我们一一详细讨论所有这些方法是什么以及它们提供了哪些功能。

要记住的要点:
- 所有方法都支持控制器。因此,如果您只需要一个控制器,那么您可以使用任何一种方法。
- 模型绑定功能也可用于所有方法。模型绑定用于将传入数据映射到控制器操作方法。
- 除了
AddRazorPages方法之外,所有其他方法都支持API Explorer功能。API Explorer使用了应用程序中所有可用 API 的列表。 - 授权可用于所有四种方法。授权主要用于提供安全功能,
- 同样,除了
AddRazorPages方法之外,所有其他方法都支持CORS。CORS基本上是一个允许跨域调用的功能。这意味着他们可以从其他域使用jQuery AJAX访问您的方法。 - 所有方法都支持验证功能。验证主要用于验证
HTTP请求数据。在 .NET Core应用程序中,我们可以使用称为数据注释的概念来实现验证。 - 除了
AddRazorPages方法外,所有其他方法都支持格式化程序映射功能。Formatter Mapping功能基本上用于格式化您的操作方法的输出,例如 JSON 或 XML 等。 Antiforgery、TempData和Views功能在AddControllers方法中不可用。- 页面仅适用于
AddMVC和AddRazorPages方法。 TagHelpers在AddControllers方法中不可用,可用于其余三种方法。- 内存缓存功能在
AddControllers方法中也不可用,但在其余三个方法中可用。
我们的应用程序使用哪种方法?
这取决于您要创建的应用程序类型。
- 如果要创建没有视图的 Web API 应用程序,则需要使用
AddControllers()扩展方法。 - 如果要使用
Razor Page应用程序,则需要在Startup类的ConfigureService方法中使用AddRazorPages()扩展方法。 - 如果你想开发一个模型视图控制器,即 MVC 应用程序,那么你需要使用
AddControllersWithViews()方法。此外,如果您希望Pages功能进入您的MVC应用程序,那么您需要使用AddMVC方法。
AddMvc:此方法具有所有功能。 因此,您可以使用此 AddMVC 方法来处理任何类型的应用程序(Web API、MVC 和 Razor Pages)。
注意:添加 AddMvc() 方法将添加额外的功能,即使您的应用程序不需要这些功能可能会影响应用程序的性能。

浙公网安备 33010602011771号