次の方法で共有


ミドルウェア: 新しい Use オーバーロード

app.Useの新しいオーバーロードが導入されました。 app.Useを呼び出しても、next ミドルウェアを呼び出さない場合は、コンパイラ エラー CS0121 が発生します。

呼び出しは、次のメソッドまたはプロパティの間であいまいです: 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>)' と '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);
});

ミドルウェアがapp.Runを呼び出さない場合は、nextを使用します。

app.Run(async (context) =>
{
    await SomeAsyncWork();
    // next never called
});

変更の理由

前の Use メソッドは、要求ごとに 2 つのオブジェクトを割り当てます。 新しいオーバーロードにより、これらの割り当てが回避され、 next ミドルウェアを呼び出す方法が少し変わります。

コンパイル エラーが発生した場合は、app.Use デリゲートを使用せずにnextを呼び出していることを意味します。 app.Runに切り替えてエラーを修正します。

影響を受ける API

なし。