zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    分享下有趣的注释头
    android studio 的自动更新问题
    docker 搭建kafka集群(入门版)
    brew换源
    golang web框架 kratos中的日志框架
    golang 日志框架(zap)完整配置和使用
    python 日志模块
    mysqldump备份恢复数据
    寻找二叉树上从根结点到给定结点的路径
    linux 磁盘IO速度测试
  • 原文地址:https://www.cnblogs.com/wangqilong/p/12540372.html
Copyright © 2011-2022 走看看