中间件不再遵从具有 null 请求委托的终结点

https://github.com/dotnet/aspnetcore/issues/42413 中所述,文件服务中间件(DefaultFilesMiddlewareDirectoryBrowserMiddlewareStaticFileMiddleware)已更新,当存在具有 null 请求委托的活动终结点时,文件服务中间件不再不执行任何操作(即遵从管道中的下一个中间件)。

引入的版本

ASP.NET Core 7.0

旧行为

以前,如果当前请求具有活动终结点(即 HttpContext.GetEndpoint() != null),则文件服务中间件将不执行任何操作,而只是委托给请求管道中的下一个中间件。

新行为

现在,仅当存在活动终结点且其 RequestDelegate 属性值不为 null(即 HttpContext.GetEndpoint()?.RequestDelegate is not null)时,文件服务中间件才不执行任何操作。

中断性变更的类型

此更改会影响二进制兼容性。

更改原因

此更改使终结点能够与终结点感知中间件共享元数据,同时使其他本应遵从的中间件也可以正常运行。 请求中的终结点可以处于活动状态,以设置元数据并与终结点感知的中间件共享元数据,以便这些中间件可以执行其预期功能。 以前在终结点处于活动状态时会遵从其行为的其他中间件(例如,文件服务中间件)也可以正常运行。

例如,可以将具有包含授权元数据的 null 请求委托的终结点设置为请求的活动终结点。 这会导致 AuthorizationMiddleware 强制执行授权要求,如果要求得到满足,将允许 StaticFileMiddleware 提供请求的文件。

如果依赖于针对请求设置活动终结点来抑制文件服务中间件的行为,请确保终结点的 RequestDelegate 属性设置了非 null 值。

受影响的 API

  • IApplicationBuilder.UseStaticFiles()
  • IApplicationBuilder.UseDefaultFiles()
  • IApplicationBuilder.UseDirectoryBrowser()