zoukankan      html  css  js  c++  java
  • MVC5管道模型+一个http请求最终怎么到MVC程序的

    1.core和MVC的区别

    .net core:可以跨平台

    .MVC5-其实也就是.net formwork:需要依赖于IIS 不能支持支持跨平台

    2. 浏览器请求到MVC程序步骤:

    • 1:浏览器发起URL请求
    • 2:浏览器会先查看浏览器缓存系统缓存路由缓存, 如有存在缓存, 就直接显示。 如果没有, 接着第3步
    • 3:url先到域名服务器解析(DNS)获取相应的 IP+端口 定位到服务器
    • 4:浏览器向服务器发起 tcp 连接, 与浏览器建立 tcp 三次握手
    • 5:握手成功, 浏览器向服务器发送 http 请求, 请求数据包(请求行,请求报头和请求正文。)
    • 6:请求到达web服务器,IIS是一直监听某个设置好了的URL端口的,  
    • 7: IIS里面有一个HTTP.SYS的一个服务接收HTTP请求 转发给ISAPI
    • 8: IIS里面的 一个ISAPI(IIS-处理程序映射) 根据URl路径的后缀区分程序(JAVA,aspx,.netcore,PHP)等进入到相应的程序(iis可以支持java,php的程序的)只要他们实现isapi
    • 9: ISAPI把URl转交给asp.net管道
    • 10.asp.net管道的执行 从HttpRuntim.ProcessRequest(HttpWorkerRequest)开始 HttpWorkerRequest(就是包含http请求包装过来的相关参数)
    • 11调用ProcessRequest方法进入管道

     

    • 12 调用ProcessRequestNoDemand,从队列中接收到isapi写的请求


    • 13 继续执行到ProcessRequestNow

    • 14继续执行ProcessRequestInternal,判断服务器是否很忙,如果很忙,就响应服务器忙;准备HttpContext上下文;把参数HttpWorkerRequest 转换成aspNet上下文 httpContext;7.继续执行到ProcessRequestNow7.继续执行到ProcessRequestNow

    • 15得到一个HttpContext上下文参数后,交给一个IhttpHander来处理;只要是实现了IhttpHander, IHttpHander; 通过IhttpHandler来处理HttpContext
    • 16:服务器请求数据, 将数据返回到浏览器
    • 17:浏览器接收响应, 读取页面内容, 解析 html 源码, 生成 Dom 树
    • 18:解析 css 样式、 浏览器渲染, js交互

    怎么处理IhttpHandler呢?

    自定义一个CustomHttpHander,实现IHttpHandler

     public class CustomHttpHander : IHttpHandler

      {

           public bool IsReusable => true;

     

               public void ProcessRequest(HttpContext context)

               {

                   Console.WriteLine("101");

                

               }

           }

    如果CustomHttpHander中的ProcessRequest 来处理Httpcontext:任何一个请求都会输出 101; 

     可以通过给事件注册动作,达到框架的灵活扩展;

    public class CustomHttpHander : IHttpHandler

           {

                public bool IsReusable => true;

                public event Action perRequet1;

                public event Action PostRequet1;

               public event Action perRequet2;

               public event Action PostRequet2;

     

               public event Action perRequet3;

               public event Action PostRequet3;

     

               public event Action perRequet4;

               public event Action PostRequet4;

     

               public void ProcessRequest(HttpContext context)

               {

                   perRequet1?.Invoke();

                   perRequet2?.Invoke();

                   perRequet3?.Invoke();

                   perRequet4?.Invoke();

                   Console.WriteLine(" 1");

                 

                   PostRequet1?.Invoke();

                   PostRequet2?.Invoke();

                   PostRequet3?.Invoke();

                   PostRequet4?.Invoke();

     

               }

           }

    自定一个IhttpHander就能生效吗?

    aspNet管理到,每一个HttpHander都有一个HttpMoudle来初始化;

    public class CustomHttpMoudle : IHttpModule

       {

           public void Dispose()

           {

               Console.WriteLine();

           }

       /// <summary>

           /// HttpModule的Init方法就是专门用来给IHttpHander初始化事件的;

           /// </summary>

           /// <param name="context"></param>

           public void Init(HttpApplication context)

           {

               context.BeginRequest += (e, x) => {

                   context.Context.Response.Write("CustomHttpMoudle.BeginRequest");

               };

     

               context.EndRequest += (e, x) => {

                   context.Context.Response.Write("CustomHttpMoudle.EndRequest");

               };

           }

       }

    webConfig增加节点:

    webConfig增加节点:

    <system.webServer>

       <modules>

         <add name="CustomHttpMoudleEvent" type="Zhaoxi.MVC5.Project.Utility.Pipelin.CustomHttpMoudleTest,Zhaoxi.MVC5.Project"></add>

         <remove name="OutputCache"/>

       </modules>

      </system.webServer>

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Configlu路径下,有一个aspnet的Module  的默认配置;

    • 13 继续执行到ProcessRequestNow
  • 相关阅读:
    SharePoint 2013 安装.NET Framework 3.5 报错
    SharePoint 2016 配置工作流环境
    SharePoint 2016 站点注册工作流服务报错
    Work Management Service application in SharePoint 2016
    SharePoint 2016 安装 Cumulative Update for Service Bus 1.0 (KB2799752)报错
    SharePoint 2016 工作流报错“没有适用于此应用程序的地址”
    SharePoint 2016 工作流报错“未安装应用程序管理共享服务代理”
    SharePoint JavaScript API in application pages
    SharePoint 2016 每天预热脚本介绍
    SharePoint 无法删除搜索服务应用程序
  • 原文地址:https://www.cnblogs.com/LZXX/p/15703211.html
Copyright © 2011-2022 走看看