中间件不再遵从具有 null 请求委托的终结点
如 https://github.com/dotnet/aspnetcore/issues/42413 中所述,文件服务中间件(DefaultFilesMiddleware
、DirectoryBrowserMiddleware
和 StaticFileMiddleware
)已更新,当存在具有 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()