阅读了这三篇文章,你也就基本理解了ASP.NET Core MVC框架的工作原理
《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有深刻的理解,知道了ASP.NET Core框架针对每个请求的处理流程。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架。真实的MVC框架其实很复杂,所以我们依然按照类似的方式大刀阔斧地“砍掉”了很多“细枝末节”,利用一个Mini版本的模拟框架将真实ASP.NET Core MVC最核心的部分展示出来。和Mini版本的ASP.NET Core框架一样,这个Mini版的ASP.NET Core MVC框架同样采用真实框架一致的设计,并且是同样可以直接运行的。为了更好的维护,我将这两个模拟框架放到了github上。
ASP.NET Core Mini: https://github.com/jiangjinnan/AspNetCoreMini
ASP.NET Core MVC Mini:https://github.com/jiangjinnan/AspNetCoreMvcMini
[上篇]路由整合
整个MVC框架建立在路由中间件(《ASP.NET Core 3框架揭秘》下册具有对路由中间件的专门介绍,本书正在参加京东满100-50活动,错过之前5折优惠的同学可以上车了)上。不论是面向Controller的Model-View-Controller编程模型,还是面向页面的Razor Pages编程模型,每个请求指向的都一个某个Action,所以MVC框架只需要将每个Action封装成一个路由终结点(RouteEndpoint),并通过自定义的EndpointDataSource注册到路由中间件上即可。本篇着重关注MVC框架与路由中间件的整合,所以我们将Action方法的定义作了最大的简化:Action方法都是无参方法,这样我们就不需要考虑参数绑定的问题;Action方法的返回值都是Task或者Void,所有的请求处理任务都实现在方法中。阅读全文…
public class FoobarController: Controller
{
public void Foo();
public Task BarAsync();
public ValueTask BazAsync();
}
[中篇]请求响应
我们在《[上篇]:路由整合》将定义在Controller类型中的Action方法简化成只返回Task或者Void的方法,并让方法自身去完成包括对请求予以相应的所有请求处理任务,但真实的MVC框架对Action方法对返回类型没有任何的限制。一般来说,我们倾向于将Action方法的返回类型定义成IActionResult、Task<IActionResult>或者ValueTask<IActionResult>。如果Action方法返回其他类型的对象,该对象最终还是会被转换成IActionResult对象。在整个MVC框架针对请求的处理流程中,IActionResult对象主要负责针对请求的响应工作。本篇我们将对上面建立的模拟框架作进一步完善,接触针对Action方法返回类型的限制。阅读全文…
public class FoobarController: Controller
{
public IActionResult Foo();
public Task<IActionResult> BarAsync();
public ValueTask<IActionResult> BazAsync();
public Foobar Qux();
public Task<Foobar> QuuxAsync();
public ValueTask<Foobar> CorgeAsync();
}
[下篇]参数绑定
模拟框架到目前为止都假定Action方法是没有参数的,我们知道MVC框架对Action方法的参数并没有作限制,它可以包含任意数量和类型的参数。一旦将“零参数”的假设去除,Action方法的执行就变得没那么简单了,因为在执行目标方法之前需要绑定所有的参数。MVC框架采用一种叫做“模型绑定(Model Binding)”的机制来绑定目标Action方法的输出参数,这可以算是MVC框架针对请求执行流程中最为复杂的一个环节。本篇文章对现有框架做进步完全,通过实现模型绑定接触上面针对Action方法参数的限制。阅读全文…
public class FoobarController: Controller
{
public IActionResult Foo(Foo foo, Bar baz);
public Task<IActionResult> BarAsync(Foo foo, Bar baz);
public ValueTask<IActionResult> BazAsync(Foo foo, Bar baz);
public Foobar Qux(Foo foo, Bar baz);
public Task<Foobar> QuuxAsync(Foo foo, Bar baz);
public ValueTask<Foobar> CorgeAsync(Foo foo, Bar baz);
}
阅读了这三篇文章,你也就基本理解了ASP.NET Core MVC框架的工作原理的更多相关文章
- 三篇文章了解 TiDB 技术内幕 —— 谈调度
任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外. 前两篇文章介绍了 TiKV.TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都 ...
- 三篇文章了解 TiDB 技术内幕——说计算
在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句. 假设我们有这样一个表的定义: CREATE ...
- 三篇文章了解 TiDB 技术内幕 - 说存储(转)
引言 数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层,是很多业务的支撑.这一领域经过了几十年的发展,不断的有新的进展. 很多人用过数据库,但是很少有人实现 ...
- jq最新前三篇文章高亮显示
/*---------最新前三篇文章高亮显示-------------*/ function latest(){ var color_arr=new Array( "blue", ...
- 三篇文章带你极速入门php(三)之php原生实现登陆注册
看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥 ...
- TIDB4 —— 三篇文章了解 TiDB 技术内幕 - 谈调度
原文地址:https://pingcap.com/blog-cn/tidb-internal-3/ 为什么要进行调度 先回忆一下第一篇文章提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 K ...
- Pro ASP.NET Core MVC 6th 第三章
第三章 MVC 模式,项目和约定 在深入了解ASP.NET Core MVC的细节之前,我想确保您熟悉MVC设计模式背后的思路以及将其转换为ASP.NET Core MVC项目的方式. 您可能已经了解 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件
标题:从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/112 ...
- 三分钟学会在ASP.NET Core MVC 中使用Cookie
一.Cookie是什么? 我的朋友问我cookie是什么,用来干什么的,可是我居然无法清楚明白简短地向其阐述cookie,这不禁让我陷入了沉思:为什么我无法解释清楚,我对学习的方法产生了怀疑!所以我们 ...
随机推荐
- nginx 502排错
线上一台机器(该论坛所在机器)近期频繁出现502,每100次访问就会出现10次,这频率也太高了.于是开始了我的502排查之旅 ps aux |grep -c php 结果为200 netstat -a ...
- ansible使用指北(二)
前言在上一篇文章里我们了解了ansible的常用模块,今天我们来了解下ansible-playbook,ansbile-playbook是一系统ansible命令的集合,其利用yaml 语言编写,an ...
- 使用hexo,创建博客
下载hexo工具 1 npm install hexo-cli -g 下载完成后可以在命令行下生成一个全局命令hexo搭建博客可用thinkjs 创建一个博客文件夹 1 hexo init 博客文件夹 ...
- CS229 Lesson 13 高斯混合模型
课程视频地址:http://open.163.com/special/opencourse/machinelearning.html 课程主页:http://cs229.stanford.edu/ 更 ...
- CSS——NO.8(代码简写)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- linux lsof常用方法
lsof简介 lsof(list open files)是一个列出当前系统打开文件的工具,在linux环境下,任何事物都是以文件形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.系统 ...
- Python 爬虫 selenium 笔记
1. selenium 安装, 与文档 pip install selenium Selenium with Python中文翻译文档 selenium官网英文文档 2. selenium 的第一个示 ...
- 如何提高码农产量,基于java的web快速开发平台之自定义表单开发随笔
老板 :下班前一定写完? 程序猿:可以,下班前能一定给! 第二天早上上班~~~ 老板:这都第二天了,怎么没写完? 程序猿:我还没有下班呢! 哎!程序猿的痛啊 公司上线的项目有不少销售记录表,又是报价单 ...
- Object-C 银行卡,信用卡校验规则(Luhn算法)
最近的项目中涉及到绑定用户的银行卡,借记卡.经过查找银行卡的校验规是采用 Luhn算法进行验证. Luhn算法,也被称作“模10算法”.它是一种简单的校验公式,一般会被用于身份证号码,IMEI号码,美 ...
- 7-43 jmu-python-字符串异常处理 (20 分)
输入一行字符串及下标,能取出相应字符.程序能对不合法数据做相应异常处理. 输入格式: 行1:输入一字符串 行2:输入字符下标 输出格式: 下标非数值异常,输出下标要整数 下标越界,输出下标越界 数据正 ...