Note
これは、この記事の最新バージョンではありません。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
WebApplication は、特定の条件に応じて 、最小 API アプリケーション で次のミドルウェアを自動的に追加します。
-
UseDeveloperExceptionPageは、HostingEnvironmentが"Development"である場合、最初に追加されます。 -
UseRoutingは、ユーザー コードによってUseRoutingがまだ呼び出されておらず、エンドポイントが構成されている (app.MapGetなど) 場合、2 番目に追加されます。 -
UseEndpointsは、エンドポイントが構成されている場合、ミドルウェア パイプラインの最後に追加されます。 -
UseAuthenticationは、ユーザー コードによってUseRoutingがまだ呼び出されておらず、サービス プロバイダーでUseAuthenticationが検出できる場合、IAuthenticationSchemeProviderの直後に追加されます。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 の前に呼び出される必要があります。
UseAuthentication を呼び出す場合、アプリでは UseAuthorization と UseCors を呼び出す必要があります。
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 は、特定の条件に応じて 、最小 API アプリケーション で次のミドルウェアを自動的に追加します。
-
UseDeveloperExceptionPageは、HostingEnvironmentが"Development"である場合、最初に追加されます。 -
UseRoutingは、ユーザー コードによってUseRoutingがまだ呼び出されておらず、エンドポイントが構成されている (app.MapGetなど) 場合、2 番目に追加されます。 -
UseEndpointsは、エンドポイントが構成されている場合、ミドルウェア パイプラインの最後に追加されます。 -
UseAuthenticationは、ユーザー コードによってUseRoutingがまだ呼び出されておらず、サービス プロバイダーでUseAuthenticationが検出できる場合、IAuthenticationSchemeProviderの直後に追加されます。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 の前に呼び出される必要があります。
UseAuthentication を呼び出す場合、アプリでは UseAuthorization と UseCors を呼び出す必要があります。
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 の詳細については、 API の概要を参照してください。
ASP.NET Core