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
资料检核及IValidateObject
Formatter Mapping
- 依Request
需求提供不同格式(JSON/XML
)内容CORS
- 支援跨网域整合
要用 Controller
但不会用到 View
,例如纯 WebAPI
,可以选这个。
3.services.AddRazorPages()
包含 AddMvcCore()
所有功能,再加上:
Razor Pages
功能- 身分验证服务
Data Annotation
- 支援Attribute
资料检核及IValidateObject
Cache Tag Helper
4.services.AddControllersWithViews()
包含 AddControllers()
的所有项目,再加上:
cshtml Razor View
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
接口上的扩展方法实现。
让我们一一详细讨论所有这些方法是什么以及它们提供了哪些功能。
要记住的要点:
- 所有方法都支持控制器。因此,如果您只需要一个控制器,那么您可以使用任何一种方法。
- 模型绑定功能也可用于所有方法。模型绑定用于将传入数据映射到控制器操作方法。
- 除了
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()
方法将添加额外的功能,即使您的应用程序不需要这些功能可能会影响应用程序的性能。
AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别相关推荐
- ASP.NET Core - 在ActionFilter中使用依赖注入
上次ActionFilter引发的一个EF异常,本质上是对Core版本的ActionFilter的知识掌握不够牢固造成的,所以花了点时间仔细阅读了微软的官方文档.发现除了IActionFilter.I ...
- AddMvc 和 AddMvcCore 的区别
目录 本文出自<从零开始学 ASP.NET CORE MVC>目录 视频课程效果更佳:从零开始学 Asp.Net Core MVC ASP.NET Core 为什么有 AddMvc 和 ...
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别
最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...
- gcc 和 g++ 的联系和区别,使用 gcc 编译 c++
GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...
- Python2 与 Python3 区别
Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...
- Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别
Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...
- HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)
TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...
- python二进制打开(rb)和文本格式打开(r)什么区别?
使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...
最新文章
- Everything排除某个目录、隐藏文件、系统文件
- Powershell快速入门(二) Shell编程
- 程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]
- 2013年2月最后一周
- leetcode 1008. Construct Binary Search Tree from Preorder Traversal | 1008. 前序遍历构造二叉搜索树(Java)
- 4-1 AlexNet神经网络
- 【转载】MySQL学习总结一
- myeclipse的优化
- 手机编程环境初尝试-用AIDE开发Android应用
- 用windows开发ios app_开发一个APP至少需要多少人|安卓|ios|产品经理
- 根据交换方式可以把交换机划分为3种:存储转发交换、直通式交换、碎片过滤式交换
- 图神经网络(GCN)
- 【转】PNG文件结构
- c语言出100道计算题,C语言例题100道
- 洛谷P4518 [JSOI2018]绝地反击(计算几何+二分图+退流)
- 人工智能会是发展中国家的下一个盖世英雄吗?
- 64位计算机可以装32位的系统么,32位的处理器可以装64位的系统吗
- android 开发相机焦距解析之调节远近焦距
- Android Platform 3.0 SDK和Eclipse ADT安装记录三
- Node的文件系统及Buffer概述
热门文章
- 交换机/路由器实验:最后说些什么
- 2021清华本科特奖答辩现场:有人用AI识别甲骨文!有人研究6G!奥运冠军:走下领奖台一切归零...
- rrpp协议如何修改_04-RRPP命令
- 王者荣耀购买装备----笔记
- python爬取qq音乐歌词风变编程_风变编程的Python课,让我离掌握编程又进了一步...
- 橘子学ES10之搜索API入门
- 电商运营风向标:数据分析。
- go文件服务器加密,gosignal: 使用 Golang 实现的端对端加密聊天软件 Signal 服务端...
- 狼与狗的本质区别:从打工到老板的突破
- 517电信日丨联通沃云携全新“上云引擎”,助力企业数字化转型