1.services.AddMvcCore()

只注册运行 Controller/Razor Pages 必要的核心服务,确保 Pipeline 程序可动作,其馀如像 Data Annotation Model Validation、身分验证等服务要自己加挂,除有特殊客制需求,一般不太常用。

2.services.AddControllers()

包含 AddMvcCore() 所做的动作外,再加上:

  1. 身分验证服务
  2. Swagger/Open API 等 API 文件动态产生功能
  3. Data Annotation - 支援 Attribute 资料检核及 IValidateObject
  4. Formatter Mapping - 依 Request 需求提供不同格式(JSON/XML)内容
  5. CORS - 支援跨网域整合

要用 Controller 但不会用到 View,例如纯 WebAPI,可以选这个。

3.services.AddRazorPages()

包含 AddMvcCore() 所有功能,再加上:

  1. Razor Pages 功能
  2. 身分验证服务
  3. Data Annotation - 支援 Attribute 资料检核及 IValidateObject
  4. Cache Tag Helper

4.services.AddControllersWithViews()

包含 AddControllers() 的所有项目,再加上:

  1. cshtml Razor View
  2. Cache 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() 所有功能,再加上:

  • Authorization
  • ApiExplorer
  • Data Annotation
  • Formatter Mapping
  • CORS

要用 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 接口上的扩展方法实现。

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

要记住的要点:

  1. 所有方法都支持控制器。因此,如果您只需要一个控制器,那么您可以使用任何一种方法。
  2. 模型绑定功能也可用于所有方法。模型绑定用于将传入数据映射到控制器操作方法。
  3. 除了 AddRazorPages 方法之外,所有其他方法都支持 API Explorer 功能。 API Explorer使用了应用程序中所有可用 API 的列表。
  4. 授权可用于所有四种方法。授权主要用于提供安全功能,
  5. 同样,除了 AddRazorPages 方法之外,所有其他方法都支持 CORSCORS基本上是一个允许跨域调用的功能。这意味着他们可以从其他域使用 jQuery AJAX 访问您的方法。
  6. 所有方法都支持验证功能。验证主要用于验证 HTTP 请求数据。在 .NET Core应用程序中,我们可以使用称为数据注释的概念来实现验证。
  7. 除了 AddRazorPages 方法外,所有其他方法都支持格式化程序映射功能。 Formatter Mapping功能基本上用于格式化您的操作方法的输出,例如 JSON 或 XML 等。
  8. Antiforgery、TempDataViews 功能在 AddControllers 方法中不可用。
  9. 页面仅适用于 AddMVCAddRazorPages 方法。
  10. TagHelpersAddControllers 方法中不可用,可用于其余三种方法。
  11. 内存缓存功能在 AddControllers 方法中也不可用,但在其余三个方法中可用。

我们的应用程序使用哪种方法?

这取决于您要创建的应用程序类型。

  1. 如果要创建没有视图的 Web API 应用程序,则需要使用 AddControllers() 扩展方法。
  2. 如果要使用 Razor Page 应用程序,则需要在 Startup 类的 ConfigureService 方法中使用AddRazorPages() 扩展方法。
  3. 如果你想开发一个模型视图控制器,即 MVC 应用程序,那么你需要使用 AddControllersWithViews() 方法。此外,如果您希望 Pages 功能进入您的 MVC 应用程序,那么您需要使用 AddMVC 方法。

AddMvc:此方法具有所有功能。 因此,您可以使用此 AddMVC 方法来处理任何类型的应用程序(Web API、MVC 和 Razor Pages)。

注意:添加 AddMvc() 方法将添加额外的功能,即使您的应用程序不需要这些功能可能会影响应用程序的性能。

AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别相关推荐

  1. ASP.NET Core - 在ActionFilter中使用依赖注入

    上次ActionFilter引发的一个EF异常,本质上是对Core版本的ActionFilter的知识掌握不够牢固造成的,所以花了点时间仔细阅读了微软的官方文档.发现除了IActionFilter.I ...

  2. AddMvc 和 AddMvcCore 的区别

    目录 本文出自<从零开始学 ASP.NET CORE MVC>目录  视频课程效果更佳:从零开始学 Asp.Net Core MVC ASP.NET Core 为什么有 AddMvc 和 ...

  3. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  4. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  5. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  6. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  7. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  8. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  9. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

最新文章

  1. Everything排除某个目录、隐藏文件、系统文件
  2. Powershell快速入门(二) Shell编程
  3. 程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]
  4. 2013年2月最后一周
  5. leetcode 1008. Construct Binary Search Tree from Preorder Traversal | 1008. 前序遍历构造二叉搜索树(Java)
  6. 4-1 AlexNet神经网络
  7. 【转载】MySQL学习总结一
  8. myeclipse的优化
  9. 手机编程环境初尝试-用AIDE开发Android应用
  10. 用windows开发ios app_开发一个APP至少需要多少人|安卓|ios|产品经理
  11. 根据交换方式可以把交换机划分为3种:存储转发交换、直通式交换、碎片过滤式交换
  12. 图神经网络(GCN)
  13. 【转】PNG文件结构
  14. c语言出100道计算题,C语言例题100道
  15. 洛谷P4518 [JSOI2018]绝地反击(计算几何+二分图+退流)
  16. 人工智能会是发展中国家的下一个盖世英雄吗?
  17. 64位计算机可以装32位的系统么,32位的处理器可以装64位的系统吗
  18. android 开发相机焦距解析之调节远近焦距
  19. Android Platform 3.0 SDK和Eclipse ADT安装记录三
  20. Node的文件系统及Buffer概述

热门文章

  1. 交换机/路由器实验:最后说些什么
  2. 2021清华本科特奖答辩现场:有人用AI识别甲骨文!有人研究6G!奥运冠军:走下领奖台一切归零...
  3. rrpp协议如何修改_04-RRPP命令
  4. 王者荣耀购买装备----笔记
  5. python爬取qq音乐歌词风变编程_风变编程的Python课,让我离掌握编程又进了一步...
  6. 橘子学ES10之搜索API入门
  7. 电商运营风向标:数据分析。
  8. go文件服务器加密,gosignal: 使用 Golang 实现的端对端加密聊天软件 Signal 服务端...
  9. 狼与狗的本质区别:从打工到老板的突破
  10. 517电信日丨联通沃云携全新“上云引擎”,助力企业数字化转型