次の方法で共有


ミドルウェアが null 要求のデリゲートでエンドポイントに従わなくなった

https://github.com/dotnet/aspnetcore/issues/42413で詳しく説明したように、ファイル提供ミドルウェア (DefaultFilesMiddlewareDirectoryBrowserMiddleware、および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()