前言
最近打算抽时间看一下 ASP.NET Core MVC 的源码,特此把自己学习到的内容记录下来,也算是做个笔记吧。
路由作为 MVC 的基本部分,所以在学习 MVC 的其他源码之前还是先学习一下路由系统,ASP.NET Core 的路由系统相对于以前的 Mvc 变化很大,它重新整合了 Web Api 和 MVC。
路由源码地址 :Routing-dev_jb51.rar
路由(Routing)功能介绍
路由是 MVC 的一个重要组成部分,它主要负责将接收到的 Http 请求映射到具体的一个路由处理程序上,在MVC 中也就是说路由到具体的某个 Controller 的 Action 上。
路由的启动方式是在ASP.NET Core MVC 应用程序启动的时候作为一个中间件来启动的,详细信息会在下一篇的文章中给出。
通俗的来说就是,路由从请求的 URL 地址中提取信息,然后根据这些信息进行匹配,从而映射到具体的处理程序上,因此路由是基于URL构建的一个中间件框架。
路由还有一个作用是生成响应的的URL,也就是说生成一个链接地址可以进行重定向或者链接。
路由中间件主要包含以下几个部分:
Getting Started
ASP.NET Core Routing 主要分为两个项目,分别是 Microsoft.AspNetCore.Routing.Abstractions,Microsoft.AspNetCore.Routing
。前者是一个路由提供各功能的抽象,后者是具体实现。
我们在阅读源码的过程中,我建议还是先大致浏览一下项目结构,然后找出关键类,再由入口程序进行阅读。
Microsoft.AspNetCore.Routing.Abstractions
大致看完整个结构之后,我可能发现了几个关键的接口,理解了这几个接口的作用后能够帮助我们在后续的阅读中事半功倍。
IRouter
在 Microsoft.AspNetCore.Routing.Abstractions
中有一个关键的接口就是 IRouter
:
public interface IRouter{ Task RouteAsync(RouteContext context); VirtualPathData GetVirtualPath(VirtualPathContext context);}
这个接口主要干两件事情,第一件是根据路由上下文来进行路由处理,第二件是根据虚拟路径上下文获取 VirtualPathData
。
IRouteHandler
另外一个关键接口是 IRouteHandler
, 根据名字可以看出主要是对路由处理程序机型抽象以及定义的一个接口。
public interface IRouteHandler{ RequestDelegate GetRequestHandler(HttpContext httpContext, RouteData routeData);}
它返回一个 RequestDelegate
的一个委托,这个委托可能大家比较熟悉了,封装了处理Http请求的方法,位于Microsoft.AspNetCore.Http.Abstractions
中,看过我之前博客的同学应该比较了解。
这个接口中
新闻热点
疑难解答
图片精选