Delen via


Middleware in minimale API-apps

Opmerking

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 10-versie van dit artikel voor de huidige release.

Waarschuwing

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.

WebApplication voegt automatisch de volgende middleware toe in Minimale API-toepassingen , afhankelijk van bepaalde voorwaarden:

  • UseDeveloperExceptionPage wordt eerst toegevoegd wanneer het HostingEnvironment is "Development".
  • UseRouting wordt tweede toegevoegd als de gebruikerscode nog niet is aangeroepen UseRouting en als er bijvoorbeeld app.MapGeteindpunten zijn geconfigureerd.
  • UseEndpoints wordt toegevoegd aan het einde van de middleware-pijplijn als er eindpunten zijn geconfigureerd.
  • UseAuthentication wordt onmiddellijk toegevoegd nadat UseRouting de gebruikerscode nog niet is aangeroepen UseAuthentication en of IAuthenticationSchemeProvider deze kan worden gedetecteerd in de serviceprovider. IAuthenticationSchemeProvider wordt standaard toegevoegd wanneer u services gebruikt AddAuthenticationen services worden gedetecteerd met behulp van IServiceProviderIsService.
  • UseAuthorization wordt vervolgens toegevoegd als de gebruikerscode nog niet is aangeroepen UseAuthorization en of IAuthorizationHandlerProvider deze kan worden gedetecteerd in de serviceprovider. IAuthorizationHandlerProvider wordt standaard toegevoegd wanneer u services gebruikt AddAuthorizationen services worden gedetecteerd met behulp van IServiceProviderIsService.
  • Door de gebruiker geconfigureerde middleware en eindpunten worden toegevoegd tussen UseRouting en UseEndpoints.

De volgende code is effectief wat de automatische middleware die aan de app wordt toegevoegd, produceert:

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

In sommige gevallen is de standaard-middlewareconfiguratie niet juist voor de app en moet deze worden gewijzigd. Moet bijvoorbeeld UseCors worden aangeroepen voor UseAuthentication en UseAuthorization. De app moet worden aangeroepen UseAuthentication en UseAuthorization als UseCors deze wordt aangeroepen:

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

Als middleware moet worden uitgevoerd voordat routekoppeling plaatsvindt, UseRouting moet u worden aangeroepen en moet de middleware worden geplaatst voordat de aanroep naar UseRouting. UseEndpoints is in dit geval niet vereist, omdat deze automatisch wordt toegevoegd zoals eerder beschreven:

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

app.UseRouting();

// other middleware and endpoints

Wanneer u een terminal-middleware toevoegt:

  • De middleware moet worden toegevoegd na UseEndpoints.
  • De app moet worden aangeroepen UseRouting en UseEndpoints zodat de terminal-middleware op de juiste locatie kan worden geplaatst.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

Terminal-middleware is middleware die wordt uitgevoerd als er geen eindpunt de aanvraag verwerkt.

WebApplication voegt automatisch de volgende middleware toe in Minimale API-toepassingen , afhankelijk van bepaalde voorwaarden:

  • UseDeveloperExceptionPage wordt eerst toegevoegd wanneer het HostingEnvironment is "Development".
  • UseRouting wordt tweede toegevoegd als de gebruikerscode nog niet is aangeroepen UseRouting en als er bijvoorbeeld app.MapGeteindpunten zijn geconfigureerd.
  • UseEndpoints wordt toegevoegd aan het einde van de middleware-pijplijn als er eindpunten zijn geconfigureerd.
  • UseAuthentication wordt onmiddellijk toegevoegd nadat UseRouting de gebruikerscode nog niet is aangeroepen UseAuthentication en of IAuthenticationSchemeProvider deze kan worden gedetecteerd in de serviceprovider. IAuthenticationSchemeProvider wordt standaard toegevoegd wanneer u services gebruikt AddAuthenticationen services worden gedetecteerd met behulp van IServiceProviderIsService.
  • UseAuthorization wordt vervolgens toegevoegd als de gebruikerscode nog niet is aangeroepen UseAuthorization en of IAuthorizationHandlerProvider deze kan worden gedetecteerd in de serviceprovider. IAuthorizationHandlerProvider wordt standaard toegevoegd wanneer u services gebruikt AddAuthorizationen services worden gedetecteerd met behulp van IServiceProviderIsService.
  • Door de gebruiker geconfigureerde middleware en eindpunten worden toegevoegd tussen UseRouting en UseEndpoints.

De volgende code is effectief wat de automatische middleware die aan de app wordt toegevoegd, produceert:

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

In sommige gevallen is de standaard-middlewareconfiguratie niet juist voor de app en moet deze worden gewijzigd. Moet bijvoorbeeld UseCors worden aangeroepen voor UseAuthentication en UseAuthorization. De app moet worden aangeroepen UseAuthentication en UseAuthorization als UseCors deze wordt aangeroepen:

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

Als middleware moet worden uitgevoerd voordat routekoppeling plaatsvindt, UseRouting moet u worden aangeroepen en moet de middleware worden geplaatst voordat de aanroep naar UseRouting. UseEndpoints is in dit geval niet vereist, omdat deze automatisch wordt toegevoegd zoals eerder beschreven:

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

app.UseRouting();

// other middleware and endpoints

Wanneer u een terminal-middleware toevoegt:

  • De middleware moet worden toegevoegd na UseEndpoints.
  • De app moet worden aangeroepen UseRouting en UseEndpoints zodat de terminal-middleware op de juiste locatie kan worden geplaatst.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

Terminal-middleware is middleware die wordt uitgevoerd als er geen eindpunt de aanvraag verwerkt.

Zie Cross-Site Request Forgery-aanvallen (XSRF/CSRF) voorkomen in ASP.NET Core voor meer informatie over antiforgery-middleware in minimale API's

Zie ASP.NET Core Middleware en de lijst met ingebouwde middleware die kan worden toegevoegd aan toepassingen voor meer informatie over middleware.

Zie het overzicht van API's voor meer informatie over minimale API's.