zoukankan      html  css  js  c++  java
  • 因要定义一个验证特性而引起的中间件学习

    中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件:

    • 选择是否将请求传递到管道中的下一个组件。
    • 可在管道中的下一个组件前后执行工作。

    请求委托用于生成请求管道, 请求委托处理每个 HTTP 请求。

    1.中间件的定义

    使用 UseRun 和 Map 配置 HTTP 管道。 Use 方法可使管道短路(即不调用 next 请求委托)。 Run 是一种约定,并且某些中间件组件可公开在管道末尾运行的 Run[Middleware] 方法。

    Map 扩展用作约定来创建管道分支。 Map* 基于给定请求路径的匹配项来创建请求管道分支。 

    2.中间件的使用

      概念性的东西,我们可以在网上找一大堆. 就不多说了.  下面我距离两种定义方式, 如果各位大神有其他的方式, 欢迎留言.  

    第一种是, 直接用app.UseMiddleware . 代码如下: 这里定义一个常规类MyMiddle . DataResult是我自定义实体类,用于返回公用信息的.

     public class MyMiddle
        {
            private readonly RequestDelegate _next;
            public MyMiddle(RequestDelegate next)
            {
                this._next = next;
            }
    
    
            public Task Invoke(HttpContext context)
            {
                DataResult result = new DataResult()
                {
                    verifiaction = false,
                    message = "管道失效" + context.Request.Host.Value.ToString()
                };
    
    
                return context.Response.WriteAsync(JsonConvert.SerializeObject(result));
                 
            }
        }

    然后在 StartUp.cs  的 Configure 方法添加

    app.UseMiddleware<MyMiddle>();

    结果返回 dataresult 实体字符.

    第二种 是用静态的, 也就是类似于内部本身提供的. 如app.UseCores(),  app.UseMvc() .

    首先, 定义自定义中间件静态类, 空间明明是 Microsoft.AspNetCore.Builder

    namespace Microsoft.AspNetCore.Builder
    {
        public static class MMidelExtensions
        {
            public static IApplicationBuilder MMidel(this IApplicationBuilder app)
            {
                DataResult result = new DataResult()
                {
                    verifiaction = true,
                    message = "中间件的另一种写法"
                };
                Func<RequestDelegate, RequestDelegate> middleware = next =>
                { 
                    return context =>
                    { 
                        return context.Response.WriteAsync(JsonConvert.SerializeObject(result));
                    };
                };
                return app.Use(middleware);
            }
        }
    }

    用法如下:  StartUp.cs  的 Configure 方法添加 

    app.MMidel();

    其实, 实际应用有很多方面, 比如, token验证, 还有暴力攻击拦截等等...都可以用中间件来进行拦截操作. 

  • 相关阅读:
    聊聊高并发系统之限流特技
    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
    密码技术(图解密码技术的学习总结)
    Nginx配置
    Nginx与浏览器缓存
    JAVA类加载和初始化
    [TimLinux] JavaScript 模态框可拖动功能实现——节流版
    [TimLinux] JavaScript 模态框可拖动功能实现——原始版
    [TimLinux] Python3 Coverity zeep/SOAP 库使用示例
    [TimLinux] Vue.js -- Day02 -- 第一个示例
  • 原文地址:https://www.cnblogs.com/mylinx/p/10494652.html
Copyright © 2011-2022 走看看