run in this way,   no why,   only for you heart
CSDN博客(点击进入) CSDN
51CTO(点击进入) 51CTO

ASP.Net MVC管道分析

一:Asp.Net MVC请求处理原理(Asp.Net mvc 是怎样进入请求管道)
在这里插入图片描述
    请求–>IIS—>ISAPIRuntime–>HttpWorkRequest–>HttpRuntime–>HttpContext–>找到Global文件,并且编译该文件–>确保Global文件中Application_Start被调用–>创建HttpApplication(池 栈)如果池中没有根据Global文件编译的类型通过反射的形式创建出HttpApplication–>获取所有的在配置文件中的HttpModues,这时System.Web.Routing下的UrlRoutingModule也获取了,执行每个Modules下的Init方法,那么UrlRoutingModule中的Init方法完成了请求管道第7个事件的注册。—>进入管道–>第7个事件触发了,执行相应的方法.—>完成了MVCHanlder的创建。—》请求管道的11与12事件之间执行MvcHandler中的ProcessRequest方法。那么该方法中去找控制器,找方法,执行方法中的代码,然后找视图最后渲染视图。
在这里插入图片描述
19个管道事件如下:
HttpApplicationFactory获取了HttpApplication实例之后。

1. BeginRequest : 开始处理请求。
2. AuthenticateRequest : 授权验证请求,获取用户授权信息。
3. PostAuthenticateRequest : 获取授权验证成功。
4. AuthorizeRequest : 授权,一般来检查用户是否获得权限。
5. PostAuthorizeRequest : 获得授权。
6. ResolveRequestCache : 获取页面缓存结果。
7. PostResolveRequestCache : 已获取缓存。当前请求映射到MvcHandler:创建控制器工厂,创建控制器,调用action执行,view->response
8. PostMapRequestHandler : 创建页面对象:创建 最终处理当前http请求的Handler示例。
9. PreAcquireRequestState : 开始加载Session。
10.PostAcquireRequestState : 获得Session。
11.PreRequestHandlerExecute : 准备执行页面对象,在页面对象或者是一般处理程序对象的PR方法执行之前。
12.PostRequestHandlerExecute : 页面对象执行结束。
13.ReleaseRequestState : 释放请求状态。
14.POSTReleaseState : 已释放请求状态。
15.UpdateRequestCache : 更新缓存。
16.PostUpdateRequestCache : 已更新缓存。
17.LogRequest : 日志记录。
18.POSTLogRequest : 已完成日志记录。
19.EndRequest : 管道事件执行完毕。

编译Global文件的时候执行:
在这里插入图片描述
    先执行右侧再执行左侧 右侧创建MvcApplication(HttpApplication)的时候执行依次初始化各Module, 左侧在执行到UrlRoutingModule 时候注册第七个事件,然后在11、12个事件之间执行下面代码,创建(MVCHandler)httpHandler,将当前请求映射到此(MVCHandler)HttpHandler ,如果是一般处理程序 执行程序员自定义的代码,如果是aspx页执行PageLoad 如果是MVC 查找控制器执行对应方法,渲染视图
在这里插入图片描述
如果是mvcHandler 按如下流程:
在这里插入图片描述


文章转自:https://blog.csdn.net/zy0421911/article/details/51206533

posted @ 2019-08-11 23:26  _小龙人  阅读(143)  评论(0编辑  收藏  举报