中间件:新 Use 重载
引入了新 app.Use
重载。 如果你调用 app.Use
但从不调用 next
中间件,现在将收到编译器错误 CS0121:
以下方法或属性之间的调用不明确:'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>)' and 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>)'
若要解决此错误,请使用 app.Run
而不是 app.Use
。
有关讨论,请参阅 GitHub 问题 dotnet/aspnetcore#32020。
引入的版本
ASP.NET Core 6.0
旧行为
app.Use(async (context, next) =>
{
await next();
});
或
app.Use(async (context, next) =>
{
await SomeAsyncWork();
// next not called...
});
新行为
现在可将 context
传递到 next
委托:
app.Use(async (context, next) =>
{
await next(context);
});
在中间件从不调用 next
时,请使用 app.Run
:
app.Run(async (context) =>
{
await SomeAsyncWork();
// next never called
});
更改原因
上面的 Use
方法为每个请求分配两个对象。 新重载对调用 next
中间件的方式进行了小幅度更改,可以避免这些分配。
建议的操作
如果遇到编译错误,则意味着在未使用 next
委托的情况下调用 app.Use
。 切换到 app.Run
可修复错误。
受影响的 API
无。