中间件:新 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

无。