Minimal API アプリのミドルウェア
Note
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、「.NET および .NET Core サポート ポリシー」を参照してください。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
WebApplication
では、特定の条件に応じて、Minimal API applications
に次のミドルウェアが自動的に追加されます。
UseDeveloperExceptionPage
は、HostingEnvironment
が"Development"
である場合、最初に追加されます。UseRouting
は、ユーザー コードによってUseRouting
がまだ呼び出されておらず、エンドポイントが構成されている (app.MapGet
など) 場合、2 番目に追加されます。UseEndpoints
は、エンドポイントが構成されている場合、ミドルウェア パイプラインの最後に追加されます。UseAuthentication
は、ユーザー コードによってUseAuthentication
がまだ呼び出されておらず、サービス プロバイダーでIAuthenticationSchemeProvider
が検出できる場合、UseRouting
の直後に追加されます。IAuthenticationSchemeProvider
は、AddAuthentication
を使用するときに既定で追加され、サービスはIServiceProviderIsService
を使用して検出されます。UseAuthorization
は、ユーザー コードによってUseAuthorization
がまだ呼び出されておらず、サービス プロバイダーでIAuthorizationHandlerProvider
が検出できる場合、次に追加されます。IAuthorizationHandlerProvider
は、AddAuthorization
を使用するときに既定で追加され、サービスはIServiceProviderIsService
を使用して検出されます。- ユーザーが構成したミドルウェアとエンドポイントは、
UseRouting
とUseEndpoints
の間に追加されます。
次のコードは、アプリに追加される自動ミドルウェアがどのようなものを生成するかを示しています。
if (isDevelopment)
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
if (isAuthenticationConfigured)
{
app.UseAuthentication();
}
if (isAuthorizationConfigured)
{
app.UseAuthorization();
}
// user middleware/endpoints
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// end user middleware/endpoints
app.UseEndpoints(e => {});
場合によっては、既定のミドルウェア構成がアプリに対して正しくなく、変更が必要になることがあります。 たとえば、UseCors は UseAuthentication と UseAuthorization の前に呼び出される必要があります。 UseCors
を呼び出す場合、アプリでは UseAuthentication
と UseAuthorization
を呼び出す必要があります。
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
ルートの照合が発生する前にミドルウェアを実行する必要がある場合は、UseRouting を呼び出す必要があり、ミドルウェアは UseRouting
への呼び出しの前に配置する必要があります。 この場合、UseEndpoints は前述のように自動的に追加されるため、必要ありません。
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// other middleware and endpoints
ターミナル ミドルウェアを追加する場合:
- このミドルウェアは、
UseEndpoints
の後に追加される必要があります。 - ターミナル ミドルウェアが正しい場所に配置されるようにするため、アプリで
UseRouting
とUseEndpoints
を呼び出す必要があります。
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
ターミナル ミドルウェアは、いずれのエンドポイントによっても要求が処理されない場合に実行されるミドルウェアです。
WebApplication
では、特定の条件に応じて、Minimal API applications
に次のミドルウェアが自動的に追加されます。
UseDeveloperExceptionPage
は、HostingEnvironment
が"Development"
である場合、最初に追加されます。UseRouting
は、ユーザー コードによってUseRouting
がまだ呼び出されておらず、エンドポイントが構成されている (app.MapGet
など) 場合、2 番目に追加されます。UseEndpoints
は、エンドポイントが構成されている場合、ミドルウェア パイプラインの最後に追加されます。UseAuthentication
は、ユーザー コードによってUseAuthentication
がまだ呼び出されておらず、サービス プロバイダーでIAuthenticationSchemeProvider
が検出できる場合、UseRouting
の直後に追加されます。IAuthenticationSchemeProvider
は、AddAuthentication
を使用するときに既定で追加され、サービスはIServiceProviderIsService
を使用して検出されます。UseAuthorization
は、ユーザー コードによってUseAuthorization
がまだ呼び出されておらず、サービス プロバイダーでIAuthorizationHandlerProvider
が検出できる場合、次に追加されます。IAuthorizationHandlerProvider
は、AddAuthorization
を使用するときに既定で追加され、サービスはIServiceProviderIsService
を使用して検出されます。- ユーザーが構成したミドルウェアとエンドポイントは、
UseRouting
とUseEndpoints
の間に追加されます。
次のコードは、アプリに追加される自動ミドルウェアがどのようなものを生成するかを示しています。
if (isDevelopment)
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
if (isAuthenticationConfigured)
{
app.UseAuthentication();
}
if (isAuthorizationConfigured)
{
app.UseAuthorization();
}
// user middleware/endpoints
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// end user middleware/endpoints
app.UseEndpoints(e => {});
場合によっては、既定のミドルウェア構成がアプリに対して正しくなく、変更が必要になることがあります。 たとえば、UseCors は UseAuthentication と UseAuthorization の前に呼び出される必要があります。 UseCors
を呼び出す場合、アプリでは UseAuthentication
と UseAuthorization
を呼び出す必要があります。
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
ルートの照合が発生する前にミドルウェアを実行する必要がある場合は、UseRouting を呼び出す必要があり、ミドルウェアは UseRouting
への呼び出しの前に配置する必要があります。 この場合、UseEndpoints は前述のように自動的に追加されるため、必要ありません。
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// other middleware and endpoints
ターミナル ミドルウェアを追加する場合:
- このミドルウェアは、
UseEndpoints
の後に追加される必要があります。 - ターミナル ミドルウェアが正しい場所に配置されるようにするため、アプリで
UseRouting
とUseEndpoints
を呼び出す必要があります。
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
ターミナル ミドルウェアは、いずれのエンドポイントによっても要求が処理されない場合に実行されるミドルウェアです。
Minimal API の偽造防止ミドルウェアの詳細については、「ASP.NET Core でのクロスサイト リクエスト フォージェリ (XSRF/CSRF) 攻撃の防止」を参照してください
ミドルウェアの詳細については、「ASP.NET Core のミドルウェア」、およびアプリケーションに追加できる組み込みミドルウェアの一覧を参照してください。
最小 API の詳細については、「Minimal APIs overview
」を参照してください。
ASP.NET Core