内容简介:《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); }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 一篇文章读懂Java Web的框架标签
- 一篇文章教会你理解和定义Scrapy爬虫框架中items.py文件
- 一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程
- 一篇文章搞定前端面试
- 一篇文章入门Flask
- 一篇文章入门MongoDB
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。