乐趣区

关于.net:如何在-ASPNET-Core-中-自定义中间件

ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且高度模块化的 web 框架,同时扩展性也是十分强,你能够在 request -> response 申请管道中安插各种中间件来依据本人的场景定制化,比如说:监督,路由,批改 request 或 response 音讯体,这篇文章咱们就来探讨 ASP.NET Core 中间件以及如何应用。

ASP.NET Core 中存在一条 中间件 链条,这条链是由一组 委托办法 组成,这些委托办法会一个接一个的被执行,request 申请会从这些中间件链条中流转,被流转到的组件,要么解决这个申请,要么将申请传给下一个中间件。

配置 中间件管道

中间件的管道配置是在 Startup.Configure 办法中,精确的说这里就是组装你的 ASP.Net Core 申请管道,ASP.Net 运行时会主动调用这个 Configure 办法,代码如下:


    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IdentityDbContext dbContext)
    {app.UseDeveloperExceptionPage();           
        app.UseStaticFiles();          
        app.UseMvcWithDefaultRoute();}

下面的代码展现了如何将 mvc 增加到 ASP.Net Core 的 申请解决管道 中,接下来筹备实现自定义中间件。

创立自定义中间件

能够利用 IApplicationBuilder 接口的扩大办法来构建你的中间件,为了代码可维护性,倡议将自定义的中间件逻辑独自放在一个类中,或者一个独自的我的项目中,这样你在更新这些代码的时候不须要更新业务逻辑层的代码。

有多种办法能够构建自定义中间件,我筹备来演示那最简略的一种,首先创立一个名为 MyCustomMiddleware 的 cs 类,骨架代码大略是这样:


    public class MyCustomMiddleware
    {//This is our custom middleware}

接下来在类的构造函数中新增一个 RequestDelegate 参数,这个 RequestDelegate 委托的签名是接管 HttpContext 参数 并返回 Task,上面是批改后的 MyCustomMiddleware。


    public class MyCustomMiddleware
    {
        private readonly RequestDelegate _next;
        public MyCustomMiddleware(RequestDelegate next)
        {_next = next;}
    }

执行 自定义中间件

当初须要给 MyCustomMiddleware 提供一个可执行的办法,供 解决流 执行到这个类时执行此办法,就是上面的 Invoke,有些敌人可能要问了,为啥肯定是 Invoke 办法,能够是其余的吗?不能够的,这是 ASP.Net Core 中间件中约定的办法名,Invoke 办法中你能够实现监督或者批改 RequestResposne


    public class MyCustomMiddleware
    {
        private readonly RequestDelegate _next;
        public MyCustomMiddleware(RequestDelegate next)
        {_next = next;}
        public async Task Invoke(HttpContext httpContext)
        {if (!httpContext.Request.Headers.Keys.Contains("Authentication-Key"))
            {
                httpContext.Response.StatusCode = 400;
                await httpContext.Response.WriteAsync("Authentication key is missing...");
                return;
            }
            else
            {//Write code here to validate the authentication key.}
            await _next.Invoke(httpContext);
        }
    }

参考下面的代码,中间件的作用就是判断 request header 中有没有无效的 authentication key,如果没有就会返回具体的错误信息给客户端。

创立扩大办法

接下来为方才创立的 自定义中间件 创立一个扩大办法,这么做的目标就是能够不便将 中间件 注入到 pipeline 中,官网的举荐做法就是在 IApplicationBuilder 接口上进行扩大,上面的代码展现了如何去实现。


    public static class MyCustomMiddlewareExtensions
    {public static IApplicationBuilder UseMyCustomMiddleware(this IApplicationBuilder builder)
        {return builder.UseMiddleware<MyCustomMiddleware>();
        }
    }

最初要做的就是在 Configure 办法下进行配置,在 app 参数下应用 UseMyCustomMiddleware() 即可,如下代码所示:


        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {app.UseMyCustomMiddleware();
        }

最初将程序跑起来,如下图:

从下面输入中能够看到,我的自定义中间件起作用了,能够看出中间件的做法让 web 程序 扩展性大大提高,如果你想理解更多中间件的常识,可参考:https://docs.microsoft.com/en…

译文链接:https://www.infoworld.com/art…

退出移动版