中间件是asp.net core的核心,甚至可以说asp.net core web api应用就是一个中间件管道,接口请求和响应一来一回。中间件,就是装配到这个管道中用来处理请求响应的组件。
关于中间件的使用,有三个核心方法:
核心方法
Use
app.Use(async (context, next) =>
{
//代码
await next.Invoke();
//代码
});
Use方法连接管道中的中间件。context参数表示当前请求的上下文信息,next表示管道中的下一个委托。next委托前的代码在请求进来时执行,next委托后的代码在响应出去时执行。
Run
Run委托没有next参数,第一个Run委托作为终端,终止管道,之后的委托都不生效。Run与不调用next参数的Use效果上相同。
app.Run(async context =>
{
await context.Response.WriteAsync("Hello world");
});
Map
Map用于创建管道分支。基于请求路径的匹配进入不同分支的执行。
app.Map("/path", app =>
{
//中间件
});
常用内置中间件
asp.net core 为常见应用场景提供了内置中间件,以下摘自msdn:
- 异常/错误处理
- 当应用在开发环境中运行时:
- 开发人员异常页中间件 (UseDeveloperExceptionPage) 报告应用运行时错误。
- 数据库错误页中间件 (UseDatabaseErrorPage) 报告数据库运行时错误。
- 当应用在生产环境中运行时:
- 异常处理程序中间件 (UseExceptionHandler) 捕获以下中间件中引发的异常。
- HTTP 严格传输安全协议 (HSTS) 中间件 (UseHsts) 添加
Strict-Transport-Security
标头。
- 当应用在开发环境中运行时:
- HTTPS 重定向中间件 (UseHttpsRedirection) 将 HTTP 请求重定向到 HTTPS。
- 静态文件中间件 (UseStaticFiles) 返回静态文件,并简化进一步请求处理。
- Cookie 策略中间件 (UseCookiePolicy) 使应用符合欧盟一般数据保护条例 (GDPR) 规定。
- 用于路由请求的路由中间件 (UseRouting)。
- 身份验证中间件 (UseAuthentication) 尝试对用户进行身份验证,然后才会允许用户访问安全资源。
- 用于授权用户访问安全资源的授权中间件 (UseAuthorization)。
- 会话中间件 (UseSession) 建立和维护会话状态。 如果应用使用会话状态,请在 Cookie 策略中间件之后和 MVC 中间件之前调用会话中间件。
- 用于将 Razor Pages 终结点添加到请求管道的终结点路由中间件(带有 MapRazorPages 的 UseEndpoints)。