次の方法で共有


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

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

次のメソッドまたはプロパティ間で呼び出しが不適切です: 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>)' と 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>)'

エラーを解決するには、app.Use の代わりに app.Run を使用します。

ディスカッションについては、GitHub のイシュー dotnet/aspnetcore#32020 を参照してください。

導入されたバージョン

ASP.NET Core 6.0

以前の動作

app.Use(async (context, next) =>
{
    await next();
});

or

app.Use(async (context, next) =>
{
    await SomeAsyncWork();
    // next not called...
});

新しい動作

next デリゲートに context を渡すことができます。

app.Use(async (context, next) =>
{
    await next(context);
});

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

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

変更理由

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

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

影響を受ける API

なし。