阅读了这三篇文章,你也就基本理解了ASP.NET Core MVC框架的工作原理

栏目: IT技术 · 发布时间: 4年前

内容简介:《ASP.NET Core Mini:ASP.NET Core MVC Mini:

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);
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

谁排第一

谁排第一

Amy N. Langville、Carl D. Meyer / 郭斯羽 / 机械工业出版社 / 2014-6 / 49

《谁排第一?关于评价和排序的科学》是首个关于评分和排名科学的著作。它是搜索排序姊妹篇的第二本。本书主要内容有:排名概述、梅西法、科利法、基纳法、埃洛体系、马尔可夫法、攻防评分法、基于重新排序的排名方法、分差、用户偏好评分、处理平局、加入权重、“假如……会怎样”的问题与敏感性、排名聚合、比较排名的方法、数据等。 《谁排第一?关于评价和排序的科学》可作为数学、计算机、网络技术、管理学和数据科学等......一起来看看 《谁排第一》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具