AddMvc 和 AddMvcCore 的区别
目录
本文出自《从零开始学 ASP.NET CORE MVC》目录
视频课程效果更佳:从零开始学 Asp.Net Core MVC
ASP.NET Core 为什么有 AddMvc 和 AddMvcCore 他们是什么关系?
在本视频中,我们将讨论 AddMvc()和 AddMvcCore()方法之间的区别。
要在 ASP.NET Core 应用程序中设置 MVC,我们在 Startup 类的 ConfigureServices()方法中调用 IServiceCollection 接口的 AddMvc()方法。
services.AddMvc();
除了 AddMvc()方法,我们在 IServiceCollection 接口上也有 AddMvcCore()方法。 因此,我们想到的一个显而易见的问题是,这两种方法之间的区别是什么。
AddMvc() v/s AddMvcCore()
在我们讨论 AddMvc()和 AddMvcCore()方法之间的区别之前,让我们修改以下 HomeController 以返回 JSON 格式的数据,而不是简单的字符串。
目前,没有为 HomeController 类指定基类。 它现在还可以为我们从 Index()动作方法返回一个简单的字符串。
public class HomeController{public string Index() {return "Hello from MVC"; }}
但是,如果我们想要从 Index()操作方法返回 HTML 视图或 JSON 数据,则我们的 HomeController 类必须继承框架提供的 Controller 类。 Controller 基类提供了返回不同结果的支持,如 JsonResult,ViewResult,PartialViewResult 等。 修改 HomeController 类以从 Controller 类派生并从 Index()方法返回 JsonResult,如下所示。
public class HomeController : Controller{public JsonResult Index() {return Json(new { id=1, name="pragim" }); }}
请注意:Controller 类存在于 Microsoft.AspNetCore.Mvc 命名空间中。
此时,运行应用程序,我们应该按预期在浏览器中看到 JSON 数据。
现在,在 ConfigureServices()方法中调用 AddMvcCore()方法而不是 AddMvc()并运行应用程序。
public void ConfigureServices(IServiceCollection services){ services.AddMvcCore();}
我们收到以下错误
没有为“Microsoft.AspNetCore.Mvc.Formatters.Json.Internal.JsonResultExecutor”类型的服务注册
为了能够返回 JSON 数据,需要在依赖注入容器中注册 JsonFormatterServices。AddMvc()方法执行此操作,但不执行 AddMvcCore()方法。您可以通过查看 ASP.NET Core MVC Github 页面上的源代码来确认这一点。
https://github.com/aspnet/Mvc/blob/release/2.2/src/Microsoft.AspNetCore.Mvc/MvcServiceCollectionExtensions.cs
顾名思义,AddMvcCore()方法只添加核心 MVC 服务。另一方面,AddMvc()方法添加了所有必需的 MVC 服务。AddMvc()方法在内部调用 AddMvcCore()方法,以添加所有核心 MVC 服务。因此,如果我们调用 AddMvc()方法,则无需再次显式调用 AddMvcCore()方法。
我希望这可以澄清 AddMvc()和 AddMvcCore()方法之间的区别。
原文地址:https://www.52abp.com/wiki/mvc/V0.16/17.AddMvcVsAddMvcCore
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
AddMvc 和 AddMvcCore 的区别相关推荐
- 不好意思,这么久没有更新《从零开始掌握ASP.NET Core 》
点击上方蓝字,关注「我们」 等了快个月了,终于开始更新了. 因为感冒,弄的嗓子有点沙哑.所以停了半个月才是更新,目前一口气更新了12个章节,大家可以耐心观看内容了. <从零开始学ASP.NET ...
- AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别
1.services.AddMvcCore() 只注册运行 Controller/Razor Pages 必要的核心服务,确保 Pipeline 程序可动作,其馀如像 Data Annotation ...
- ASP.NET Core Controller与IOC的羁绊
前言 看到标题可能大家会有所疑问Controller和IOC能有啥羁绊,但是我还是拒绝当一个标题党的.相信有很大一部分人已经知道了这么一个结论,默认情况下ASP.NET Core的Controller ...
- 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 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...
最新文章
- 普及组2008NOIP 排座椅(贪心+排序)
- 「Swift」Swift与C++和Python
- 量化交易初探(图文版其一)
- MySQL_(Java)分页查询MySQL中的数据
- python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
- linux下NIS搭建(六)
- 小米摄像头共享显示服务器错误6,小米摄像头
- SPSSPRO杯第十五届数学中国数学建模网络挑战赛赛题浅评
- c# 正则匹配,匹配括号,中括号等
- linux看物流内核命令,Linux基础命令
- 【SQL文档整理系列1】MySQL创建procedure(可以用来造测试数据)
- mac电脑升级Monterey12.1版之后L2TP连接公司内网后无法正常访问的问题解决
- 郑豪8.6非农数据提前布局,黄金是延续跌势还是多头反击?美盘操作建议
- 【Solidity】函数returns多个值的接收方式
- 记忆化搜索 day48
- HJY-F931A/YJ三相电压继电器
- ImageCombiner图片合成工具
- JavaScript实现二级联动(省市、楼栋)
- python爬虫框架教程_Python爬虫实战(十二):爬虫框架Scrapy的第一个爬虫示例入门教程...
- 【白皮书分享】2021年脑机接口技术在医疗健康领域应用白皮书.pdf(附下载链接)...