请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#问题入口 ASP.NET问题入口

【C#问题提交】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接毕业设计】 面试-葵花宝典下载

官方一群:

官方二群:

查看: 542|回复: 15

asp.net core中间件工作原理

  [复制链接]
  • TA的每日心情
    开心
    前天 21:32
  • 签到天数: 1610 天

    [LV.Master]伴坛终老

    4251

    主题

    6177

    帖子

    11万

    积分

    管理员

    IBC编程社区-原道楠

    Rank: 9Rank: 9Rank: 9

    积分
    111382

    推广达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2019-12-12 09:53:04 | 显示全部楼层 |阅读模式

    马上加入IBC,查看更多教程

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

      不少刚学习.net core朋侪对中间件的概念不停分不清晰,到底StartUp下的Configure方法是在做什么?

    1. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    2. {
    3.   if (env.IsDevelopment())
    4. {
    5.   app.UseDeveloperExceptionPage();
    6. }
    7.   app.UseMvc();  
    8. }
    复制代码

      各人都说每个request进来都会对Configure方法中的中间件实验一遍,但通过调试发现,只有步伐在启动时才会实验这段代码,事后的每次哀求并不会进入

      下面给各人简单表明一下:

      假设有3个方法A B C,都有本身的业务逻辑,且参数范例与返回值范例雷同

    1.   public Task MethodA(HttpContext context);
    2.   public Task MethodB(HttpContext context);
    3.   public Task MethodC(HttpContext context);
    复制代码

      这个时间假设我通过某种本领将C方法放进B方法变成方法BC,类似:

      

    1. public Task MethodBC(HttpContext context)
    2. {
    3.   //方法B原先逻辑
    4.   return MethodC(context);
    5. }
    复制代码

      同理将方法BC放进方法A变成方法ABC:

      

    1. public Task MethodABC(HttpContext context)
    2. {
    3.   //方法A原先逻辑
    4.   return MethodBC(context);
    5. }
    6. 睁开后:
    7. public Task MethodABC(HttpContext context)
    8. {
    9.   //方法A原先逻辑
    10.   //方法B原先逻辑
    11. return MethodC(context);
    12. }
    复制代码

      将本来互不干执的3个方法揉进一个方法中,当服务器吸收到哀求时,封装好上下文丢进这个聚合方法

      换个思绪,感觉观察者模式会不会更简单些,IServer中写个事故,有必要往内里注册就好了

      那怎么才可以将方法当个参数一样使用呢,自然是委托,下面官方的声明:

      中间件中最基础的组件,以HttpContext为参数,Task作为返回值

    delegate Task RequestDelegate(HttpContext context);

      

      中间件的根本实现原理:

    1.   public RequestDelegate Use(RequestDelegate @delegate)
    2. {
    3.   return (context)=>
    4.   {
    5.     //一些逻辑
    6.     return @delegate.Invoke(context);
    7.   };
    8. }
    复制代码

    细细一想,是不是就是在@delegate前面加了一些逻辑后重新天生一个RequestDelegate返回

    g

    C#论坛 www.ibcibc.com IBC编程社区
    C#
    C#论坛
    IBC编程社区
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则