认识Asp.net MVC
Asp.net是微软提供的用于网站开发的基础框架。Asp.net MVC是在Asp.net的基础上实现的MVC模式,Asp.net Webform 是在asp.net的基础上实现了事件请求机制。Asp.net WebForm与Asp.net MVC是asp.net基础上的两种不同的编程框架。
Asp.net WebForm处理流程
客户端浏览器向服务其发出请求--->IIS服务其接受请求--->IIS交由asp.net处理,asp.net请求管道机制(过滤请求,根据请求选择不同处理程序)---->处理程序IHandler
根据HttpContext.HttpRequest
读取用户请求信息,HttpContext.HttpResponse
写入服务器响应流(如下图)
其实就是各流处理,客户端根据Http协议发出请求流--->服务端根据请求流发送到客户端响应流
Asp.net WebForm实现MVC
实现思想:通过实现IHttpModule
注入asp.net请求管道,并调用将请求交由实现的IHttpHandler
类,在IHttpHandler
处理用户请求。具体实现过程
- 实现
IHttpModule
并通过config注入管道(IIS的Integrated
和Classic
模式写法不同) - 通过
Route
得到RouteData
,RouteData
指明了IHandler
-
IHandler
的执行需要调用用户请求Controller
下的Action
-
Controller
相关类通过IControllerFactory
得到Controller
-
ActionInvoker
执行Controller
下的Action
-
IModelBinder
根据用户请求中的数据绑定到Action
的参数 ActionResult
根据Action
返回值,写入HttpContext.HttpResponse
响应流
具体实现分析
Route实现
Route
最终需要得到的值为RouteData
,RouteData
包括IHandler
和从请求中提取的Controller
和Action
值。为了使用的灵活性,满足可以根据用户定义URL模板。
-
Route
主要根据URL模块提取用户请求,指明IHandler
-
RouteTable
包括Route
的集合对象,作用可以声明多个Route
- 服务开启时注入
Route
Controller实现
IRouteHandler
通过Controller
和Action
的值得到实体
-
IRouteHandler
获得IHandler
-
IControllerFactory
通过工厂获得IController
-
ControllerBuilder
在服务启动时注入IControllerFactory
-
DefaultControllerFactory
通过反射或取Web端下的Controller
Action调用
现在已经得到了Controller
。下面解决调用Controller
下的Action
.
-
IActionInvoker
反射调用Action
,需要参数绑定 -
IModelBinder
根据请求数据绑定参数 -
ActionResult
根据Action
执行的返回值写入响应流