前言
本文介绍 ASP.NET Core 中间件.
环境
- Visual Studio 2017
- ASP.NET Core 2.2
开局
第一手: 中间件概述
1. 中间件: 添加到应用管道用于处理处理请求和响应的组件. 每个组件:
- 可以选择是否将请求传递到管道中的下一个组件;
- 可以在调用管道中的下一个组件之前和之后执行工作;
2. 管道: 如图中黑色箭头, 从请求到相应的过程, 称之为管道;
3. 上图解释: 当 Request 进来时, 首先进入 Middleware1, 然后调用 next 方法进入 Middleware2,
然后调用 next 方法进入 Middleware3, 没有 next 方法所以再依次返回, 完成管道处理;
4. 三种方法添加中间件:
- Use: 通常使用 Use,Use 也可使管道短路, 即不调用 next 方法;
- Run:Run 一般在管道末端使用 Run 方法;
- Map:Map 一般用于处理特定的请求路径.
下面介绍这三种方法的使用.
第二手: 中间件使用
1.Use 的使用
1. 说一下 IApplicationBuilder,Use,Run, 和 Map 添加中间件, 其实都是添加到 IApplicationBuilder
中的一个组件容器内, 在执行时, 会遍历这个组件容器, 依次执行中间件.
2.Run 的使用
3.Map 的使用
内置中间件
ASP.NET Core 内置了以下中间件 (用法: Use{中间件}):
中间件 | 描述 | 顺序 |
---|---|---|
Authentication | 提供身份验证支持。 | 在需要 HttpContext.User 之前。 OAuth 回叫的终端。 |
Cookie Policy | 跟踪用户是否同意存储个人信息,并强制实施 cookie 字段(如 secure 和 SameSite)的最低标准。 | 在发出 cookie 的中间件之前。 示例:身份验证、会话、MVC (TempData)。 |
CORS | 配置跨域资源共享。 | 在使用 CORS 的组件之前。 |
Diagnostics | 配置诊断。 | 在生成错误的组件之前。 |
Forwarded Headers | 将代理标头转发到当前请求。 | 在使用已更新字段的组件之前。 示例:方案、主机、客户端 IP、方法。 |
Health Check | 检查 ASP.NET Core 应用及其依赖项的运行状况,如检查数据库可用性。 | 如果请求与运行状况检查终结点匹配,则为终端。 |
HTTP Method Override | 允许传入 POST 请求重写方法。 | 在使用已更新方法的组件之前。 |
HTTPS Redirection | 将所有 HTTP 请求重定向到 HTTPS(ASP.NET Core 2.1 或更高版本)。 | 在使用 URL 的组件之前。 |
HTTP Strict Transport Security (HSTS) | 添加特殊响应标头的安全增强中间件(ASP.NET Core 2.1 或更高版本)。 | 在发送响应之前,修改请求的组件之后。 示例:转接头、URL 重写。 |
MVC | 用 MVC/Razor Pages 处理请求(ASP.NET Core 2.0 或更高版本)。 | 如果请求与路由匹配,则为终端。 |
OWIN | 与基于 OWIN 的应用、服务器和中间件进行互操作。 | 如果 OWIN 中间件处理完请求,则为终端。 |
Response Caching | 提供对缓存响应的支持。 | 在需要缓存的组件之前。 |
Response Compression | 提供对压缩响应的支持。 | 在需要压缩的组件之前。 |
Request Localization | 提供本地化支持。 | 在对本地化敏感的组件之前。 |
Routing | 定义和约束请求路由。 | 用于匹配路由的终端。 |
Session | 提供对管理用户会话的支持。 | 在需要会话的组件之前。 |
Static Files | 为提供静态文件和目录浏览提供支持。 | 如果请求与文件匹配,则为终端。 |
URL Rewriting | 提供对重写 URL 和重定向请求的支持。 | 在使用 URL 的组件之前。 |
WebSockets | 启用 webSockets 协议。 | 在接受 WebSocket 请求所需的组件之前。 |
第三手: 中间件自定义
1. 创建自定义中间件类, 并提供使用它的扩展方法
2. 在 Configure 方法中调用
3. 运行
来源: http://www.jianshu.com/p/ff1a9bd14eb6