中间件

1.什么是中间件(Middleware)?

中间件是一种装配到应用管道以处理请求和响应的软件。

每个组件:

  • 选择是否将请求传递到管道中下一个组件
  • 可在调用管道中的下一个组件前后执行工作
    请求委托(Request delegates)用于生成请求管道,处理每个HTTP请求。
    请求委托使用RunMapUse扩展方法进行配置

使用RunMapUse扩展方法来配置请求委托。

1.并行中间件: 可将一个单独的请求委托并行指定为匿名方法
2.中间件组件: 或在可重用的类中对其进行定义。这些可重用的类和并行匿名方法

中间件.png

每个委托可以在下一个委托之前和之后执行操作。委托还可以决定不将请求传递给下一个委托,这称为请求管道的短路。短路通常是可取的,因为它避免了不必要的工作。

1.所有的请求处理都会在每个中间件组件调用next()方法之前触发。请求按照图中箭头的所示方向,依次穿过所有管道
2.当中间件处理请求并产生响应时,请求流程会在管道开始反向传递

可以看出请求委托的执行顺序是遵循上面的流程图的。

注意:
响应发送到客户端后,请勿调用next.Invoke。 响应开始之后,对HttpResponse的更改将抛出异常。 例如,设置响应头,状态代码等更改将会引发异常。在调用next之后写入响应体。

  • 可能导致协议违规。 例如,写入超过content-length所述内容长度。
  • 可能会破坏响应内容格式。 例如,将HTML页脚写入CSS文件。

HttpResponse.HasStarted是一个有用的提示,指示是否已发送响应头和/或正文已写入。

顺序

Startup.Configure方法中添加中间件的顺序定义了在请求上调用它们的顺序,以及响应的相反顺序。此排序对于安全性,性能和功能至关重要。
Startup.Configure方法添加了以下中间件组件:
1.异常/错误处理
2.静态文件服务
3.身份认证
4.MVC

Use、Run和Map

你可以使用UseRunMap配置HTTP管道。
Use方法可以使管道短路(即可以不调用下一个请求委托)
Run方法是一个约定,并且一些中间件可能暴露在管道末端运行的Run[Middleware]方法。
Map*扩展用作分支管道的约定。映射根据给定的请求路径的匹配来分支请求流水线,如果请求路径以给定路径开始,则执行分支

你可能感兴趣的:(中间件)