认识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
执行的返回值写入响应流
转载于:https://www.cnblogs.com/LoveTomato/p/9456809.html