Dela via


Mellanprogram i minimala API-appar

Anmärkning

Det här är inte den senaste versionen av den här artikeln. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Varning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Viktigt!

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

WebApplication lägger automatiskt till följande mellanprogram i Minimala API-program beroende på vissa villkor:

  • UseDeveloperExceptionPage läggs till först när HostingEnvironment är "Development".
  • UseRouting läggs till andra om användarkoden inte redan anropas UseRouting och om det finns konfigurerade slutpunkter, till exempel app.MapGet.
  • UseEndpoints läggs till i slutet av pipelinen för mellanprogram om några slutpunkter har konfigurerats.
  • UseAuthentication läggs till omedelbart efter UseRouting om användarkoden inte redan anropas UseAuthentication och om IAuthenticationSchemeProvider kan identifieras i tjänstleverantören. IAuthenticationSchemeProvider läggs till som standard när du använder AddAuthenticationoch tjänster identifieras med hjälp av IServiceProviderIsService.
  • UseAuthorization läggs till nästa om användarkoden inte redan anropas UseAuthorization och om IAuthorizationHandlerProvider kan identifieras i tjänstleverantören. IAuthorizationHandlerProvider läggs till som standard när du använder AddAuthorizationoch tjänster identifieras med hjälp av IServiceProviderIsService.
  • Användar konfigurerade mellanprogram och slutpunkter läggs till mellan UseRouting och UseEndpoints.

Följande kod är i praktiken vad det automatiska mellanprogrammet som läggs till i appen genererar:

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 => {});

I vissa fall är standardkonfigurationen för mellanprogram inte korrekt för appen och kräver ändringar. Till exempel UseCors bör anropas före UseAuthentication och UseAuthorization. Appen måste anropa UseAuthentication och UseAuthorization om UseCors anropas:

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

Om mellanprogram ska köras innan routningsmatchning sker UseRouting ska anropas och mellanprogrammet ska placeras före anropet till UseRouting. UseEndpoints krävs inte i det här fallet eftersom det läggs till automatiskt enligt beskrivningen tidigare:

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

app.UseRouting();

// other middleware and endpoints

När du lägger till ett terminalmellanprogram:

  • Mellanprogrammet måste läggas till efter UseEndpoints.
  • Appen måste anropa UseRouting och UseEndpoints så att terminalmellanprogrammet kan placeras på rätt plats.
app.UseRouting();

app.MapGet("/", () => "hello world");

app.UseEndpoints(e => {});

app.Run(context =>
{
    context.Response.StatusCode = 404;
    return Task.CompletedTask;
});

Terminalmellanprogram är mellanprogram som körs om ingen slutpunkt hanterar begäran.

WebApplication lägger automatiskt till följande mellanprogram i Minimala API-program beroende på vissa villkor:

  • UseDeveloperExceptionPage läggs till först när HostingEnvironment är "Development".
  • UseRouting läggs till andra om användarkoden inte redan anropas UseRouting och om det finns konfigurerade slutpunkter, till exempel app.MapGet.
  • UseEndpoints läggs till i slutet av pipelinen för mellanprogram om några slutpunkter har konfigurerats.
  • UseAuthentication läggs till omedelbart efter UseRouting om användarkoden inte redan anropas UseAuthentication och om IAuthenticationSchemeProvider kan identifieras i tjänstleverantören. IAuthenticationSchemeProvider läggs till som standard när du använder AddAuthenticationoch tjänster identifieras med hjälp av IServiceProviderIsService.
  • UseAuthorization läggs till nästa om användarkoden inte redan anropas UseAuthorization och om IAuthorizationHandlerProvider kan identifieras i tjänstleverantören. IAuthorizationHandlerProvider läggs till som standard när du använder AddAuthorizationoch tjänster identifieras med hjälp av IServiceProviderIsService.
  • Användar konfigurerade mellanprogram och slutpunkter läggs till mellan UseRouting och UseEndpoints.

Följande kod är i praktiken vad det automatiska mellanprogrammet som läggs till i appen genererar:

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 => {});

I vissa fall är standardkonfigurationen för mellanprogram inte korrekt för appen och kräver ändringar. Till exempel UseCors bör anropas före UseAuthentication och UseAuthorization. Appen måste anropa UseAuthentication och UseAuthorization om UseCors anropas:

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

Om mellanprogram ska köras innan routningsmatchning sker UseRouting ska anropas och mellanprogrammet ska placeras före anropet till UseRouting. UseEndpoints krävs inte i det här fallet eftersom det läggs till automatiskt enligt beskrivningen tidigare:

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

app.UseRouting();

// other middleware and endpoints

När du lägger till ett terminalmellanprogram:

  • Mellanprogrammet måste läggas till efter UseEndpoints.
  • Appen måste anropa UseRouting och UseEndpoints så att terminalmellanprogrammet kan placeras på rätt plats.
app.UseRouting();

app.MapGet("/", () => "hello world");

app.UseEndpoints(e => {});

app.Run(context =>
{
    context.Response.StatusCode = 404;
    return Task.CompletedTask;
});

Terminalmellanprogram är mellanprogram som körs om ingen slutpunkt hanterar begäran.

Information om mellanprogram mot förfalskning i minimala API:er finns i Förhindra XSRF-/CSRF-attacker (Cross-Site Request Forgery) i ASP.NET Core

Mer information om mellanprogram finns i ASP.NET Core Middleware och listan över inbyggda mellanprogram som kan läggas till i program.

Mer information om minimala API:er finns i ÖVERSIKT över API:er.