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
办法中你能够实现监督或者批改 Request
或 Resposne
。
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…