zoukankan      html  css  js  c++  java
  • ASP.NET Core – Middleware

    前言

    MIddleware 就是中间件, ASP.NET Core 是用来处理 http request 的.

    当 request 抵到 server 就进入了 Middleware pipe. 每个 pipe 会有不同职责 (比如验证 athen, autho, routing 等)

    然后依据 request 的 information, 最终输出 response.

    主要参考

    ASP.NET Core Middleware

    执行顺序

    一张图胜过千言万语.

    Run

    撇开 routing, razor pages 这些, 最简单的就是定义一个 Run, 它就可以处理所有的 request 了. 统统返回 Hello World text.

    app.Run(async context =>
    {
        await context.Response.WriteAsync("Hello, World!");
    });

    Run 属于 terminal middleware 终点站, 也就是说, 即便它后续还有其它的 Middleware 通通不会被执行了. 

    我们一般上很少会用这个.

    Use

    app.Use(async (context, next) =>
    {
        // do something before next
        await next.Invoke();
        // do something after next 
    });

    Use 就是最常使用的 Middleware 了, 它可以是 terminal 也可以不是, 取决于你有没有调用 next.Invoke

    比如 authen, 在 before next 之前就可以从 request 中获取 token 然后做验证. 如果失败就返回 401 成功就 next. 

    比如 压缩, 在 after next 的时候对 response 进行压缩. 

    UseWhen

    UseWhen 就只是多了一个判断, 看要不要跑 Run 或 Use 而已. 

    常用的情况比如, WebAPI 和 Razor Page 都用同一个 Application 的话, 就可以通过 request starts with /api 来决定用什么配置 (比如 UseExceptionHandler)

    app.UseWhen(context => context.Request.Query.ContainsKey("branch"), appBuilder => 
    {
        appBuilder.Use(async (context, next) =>
        {
            // do something before next
            await next.Invoke();
            // do something after next 
        });
    });

    还有一个叫 MapWhen 它和 UseWhen 的区别是它里面是 Run, 而 UseWhen 里面是 Use.

    Middleware Pipe 之间沟通

    middleware 要通信, 一般上会使用 Request Features, 类似全局变量吧.

    context.Features.Set<string>("dada");
    var value = context.Features.Get<string>();

    注: 它是用类似作为 key 的哦,

    Build-in Middleware

    MVC and Razor Page

  • 相关阅读:
    腾讯X5内核使用详解(X5内核播放器使用如何去除控制栏全屏播放)以及一些注意事项
    易语言加壳SDK(宏标记)
    安卓相对布局常用语句
    安卓平分位置layout_weight学习记录
    为什么要前后端分离?各有什么优缺点?
    前端开发技术路线
    超实用的JQuery小技巧
    HTML元素脱离文档流的三种方法
    Promise的理解
    JS闭包是什么?
  • 原文地址:https://www.cnblogs.com/keatkeat/p/15439758.html
Copyright © 2011-2022 走看看