目录

本文出自《从零开始学 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 的区别相关推荐

  1. 不好意思,这么久没有更新《从零开始掌握ASP.NET Core 》

    点击上方蓝字,关注「我们」 等了快个月了,终于开始更新了. 因为感冒,弄的嗓子有点沙哑.所以停了半个月才是更新,目前一口气更新了12个章节,大家可以耐心观看内容了. <从零开始学ASP.NET ...

  2. AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别

    1.services.AddMvcCore() 只注册运行 Controller/Razor Pages 必要的核心服务,确保 Pipeline 程序可动作,其馀如像 Data Annotation ...

  3. ASP.NET Core Controller与IOC的羁绊

    前言 看到标题可能大家会有所疑问Controller和IOC能有啥羁绊,但是我还是拒绝当一个标题党的.相信有很大一部分人已经知道了这么一个结论,默认情况下ASP.NET Core的Controller ...

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

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

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

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

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

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

  7. Python2 与 Python3 区别

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

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

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

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

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

最新文章

  1. 普及组2008NOIP 排座椅(贪心+排序)
  2. 「Swift」Swift与C++和Python
  3. 量化交易初探(图文版其一)
  4. MySQL_(Java)分页查询MySQL中的数据
  5. python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
  6. linux下NIS搭建(六)
  7. 小米摄像头共享显示服务器错误6,小米摄像头
  8. SPSSPRO杯第十五届数学中国数学建模网络挑战赛赛题浅评
  9. c# 正则匹配,匹配括号,中括号等
  10. linux看物流内核命令,Linux基础命令
  11. 【SQL文档整理系列1】MySQL创建procedure(可以用来造测试数据)
  12. mac电脑升级Monterey12.1版之后L2TP连接公司内网后无法正常访问的问题解决
  13. 郑豪8.6非农数据提前布局,黄金是延续跌势还是多头反击?美盘操作建议
  14. 【Solidity】函数returns多个值的接收方式
  15. 记忆化搜索 day48
  16. HJY-F931A/YJ三相电压继电器
  17. ImageCombiner图片合成工具
  18. JavaScript实现二级联动(省市、楼栋)
  19. python爬虫框架教程_Python爬虫实战(十二):爬虫框架Scrapy的第一个爬虫示例入门教程...
  20. 【白皮书分享】2021年脑机接口技术在医疗健康领域应用白皮书.pdf(附下载链接)...

热门文章

  1. 在Windows 7中的Windows Media Player 12中快速预览歌曲
  2. mysql经典的8小时问题-wait_timeout
  3. 2014 网选 上海赛区 hdu 5047 Sawtooth
  4. PHP: 深入了解一致性哈希
  5. AngularJS快速入门指南09:SQL
  6. SQL 结合CASE WHEN 实现二维统计
  7. 五大原则之----里氏替换原则(LSP)
  8. 腾讯急招多名.NET Core,5年30k!
  9. Dapr牵手.NET学习笔记:状态管理之docker-compose发布
  10. Docker小白到实战之常用命令演示,通俗易懂