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验证, 还有暴力攻击拦截等等...都可以用中间件来进行拦截操作. 

  • 相关阅读:
    [笔记]Oracle遇到的问题及解决的办法
    [转载] linux三款好用网络监控软件(bwmng 、iftop、iptraf)
    IE无法打开internet站点已终止操作的解决办法 (转)
    怎样去掉桌面图标和字的蓝色阴影
    ASP.NET下载文件(转载)
    获取iframe内容IE下的延时 (转载)
    文件上传入数据库&从数据库中下载文件(转载)
    asp.net 4.0 A potentially dangerous Request.Form value was detected fr(转载)
    location.search
    IE6下的CSS BUG枚举 (转)
  • 原文地址:https://www.cnblogs.com/mylinx/p/10494652.html
Copyright © 2011-2022 走看看