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
  • 相关阅读:
    一个996程序员的自述:在公司眼里你就是一个工具
    我国为何如此重视编程教育?少儿编程会纳入基础教学吗?
    自学 Python 到什么程度能找到工作,1300+ 条招聘信息告诉你答案
    Book
    BFS
    Word写论文公式输入
    matlab保存超分辨率图
    [转载]有价值的Paper
    Latex作图
    微软企业库5.0学习笔记(七)存储容器的引用
  • 原文地址:https://www.cnblogs.com/LZXX/p/15703211.html
Copyright © 2011-2022 走看看