• 阅读了这三篇文章,你也就基本理解了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);
    }
  • 相关阅读:
    在阿里云申请Symantec免费SSL证书操作流程
    http改造成https的实践案例
    Extjs Window用法详解 3 打印具体应用,是否关掉打印预览的界面
    【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (下篇)
    【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)
    打开文件或者uri的方式--------进程启动文件和启动者启动文件
    C# 各版本新特性
    iOS: 音效和音乐的播放,封装的工具类
    iOS: xcode打包上传iTunes失败,iTunes Store operation failed,this action can not complete .try again
    iOS: 详细的正则表达式
  • 原文地址:https://www.cnblogs.com/artech/p/asp-net-core-mvc-mini.html
Copyright © 2020-2023  润新知