Condividi tramite


Middleware nelle app per le API minime

Nota

Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 8 di questo articolo.

Avviso

Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere Criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 8 di questo articolo.

Importante

Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.

Per la versione corrente, vedere la versione .NET 8 di questo articolo.

WebApplication aggiunge automaticamente il middleware seguente in Minimal API applications a seconda di determinate condizioni:

  • UseDeveloperExceptionPage viene aggiunto per primo quando è HostingEnvironment "Development".
  • UseRouting viene aggiunto secondo se il codice utente non ha già chiamato UseRouting e se sono stati configurati endpoint, ad esempio app.MapGet.
  • UseEndpoints viene aggiunto alla fine della pipeline middleware se sono configurati endpoint.
  • UseAuthentication viene aggiunto immediatamente dopo UseRouting se il codice utente non ha già chiamato UseAuthentication e se IAuthenticationSchemeProvider è possibile rilevare nel provider di servizi. IAuthenticationSchemeProvider viene aggiunto per impostazione predefinita quando si usano AddAuthenticationi servizi e viene rilevato tramite IServiceProviderIsService.
  • UseAuthorization viene aggiunto successivamente se il codice utente non ha già chiamato UseAuthorization e se IAuthorizationHandlerProvider è possibile rilevare nel provider di servizi. IAuthorizationHandlerProvider viene aggiunto per impostazione predefinita quando si usano AddAuthorizationi servizi e viene rilevato tramite IServiceProviderIsService.
  • Il middleware e gli endpoint configurati dall'utente vengono aggiunti tra UseRouting e UseEndpoints.

Il codice seguente è effettivamente ciò che il middleware automatico aggiunto all'app produce:

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 alcuni casi, la configurazione del middleware predefinita non è corretta per l'app e richiede modifiche. Ad esempio, UseCors deve essere chiamato prima UseAuthentication di e UseAuthorization. L'app deve chiamare UseAuthentication e UseAuthorization se UseCors viene chiamato:

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

Se il middleware deve essere eseguito prima che si verifichi la corrispondenza della route, UseRouting deve essere chiamato e il middleware deve essere posizionato prima della chiamata a UseRouting. UseEndpoints in questo caso non è obbligatorio perché viene aggiunto automaticamente come descritto in precedenza:

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

app.UseRouting();

// other middleware and endpoints

Quando si aggiunge un middleware del terminale:

  • Il middleware deve essere aggiunto dopo UseEndpoints.
  • L'app deve chiamare UseRouting e UseEndpoints in modo che il middleware del terminale possa essere posizionato nella posizione corretta.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

Il middleware del terminale è middleware che viene eseguito se nessun endpoint gestisce la richiesta.

WebApplication aggiunge automaticamente il middleware seguente in Minimal API applications a seconda di determinate condizioni:

  • UseDeveloperExceptionPage viene aggiunto per primo quando è HostingEnvironment "Development".
  • UseRouting viene aggiunto secondo se il codice utente non ha già chiamato UseRouting e se sono stati configurati endpoint, ad esempio app.MapGet.
  • UseEndpoints viene aggiunto alla fine della pipeline middleware se sono configurati endpoint.
  • UseAuthentication viene aggiunto immediatamente dopo UseRouting se il codice utente non ha già chiamato UseAuthentication e se IAuthenticationSchemeProvider è possibile rilevare nel provider di servizi. IAuthenticationSchemeProvider viene aggiunto per impostazione predefinita quando si usano AddAuthenticationi servizi e viene rilevato tramite IServiceProviderIsService.
  • UseAuthorization viene aggiunto successivamente se il codice utente non ha già chiamato UseAuthorization e se IAuthorizationHandlerProvider è possibile rilevare nel provider di servizi. IAuthorizationHandlerProvider viene aggiunto per impostazione predefinita quando si usano AddAuthorizationi servizi e viene rilevato tramite IServiceProviderIsService.
  • Il middleware e gli endpoint configurati dall'utente vengono aggiunti tra UseRouting e UseEndpoints.

Il codice seguente è effettivamente ciò che il middleware automatico aggiunto all'app produce:

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 alcuni casi, la configurazione del middleware predefinita non è corretta per l'app e richiede modifiche. Ad esempio, UseCors deve essere chiamato prima UseAuthentication di e UseAuthorization. L'app deve chiamare UseAuthentication e UseAuthorization se UseCors viene chiamato:

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

Se il middleware deve essere eseguito prima che si verifichi la corrispondenza della route, UseRouting deve essere chiamato e il middleware deve essere posizionato prima della chiamata a UseRouting. UseEndpoints in questo caso non è obbligatorio perché viene aggiunto automaticamente come descritto in precedenza:

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

app.UseRouting();

// other middleware and endpoints

Quando si aggiunge un middleware del terminale:

  • Il middleware deve essere aggiunto dopo UseEndpoints.
  • L'app deve chiamare UseRouting e UseEndpoints in modo che il middleware del terminale possa essere posizionato nella posizione corretta.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

Il middleware del terminale è middleware che viene eseguito se nessun endpoint gestisce la richiesta.

Per informazioni sul middleware antiforgery nelle API minime, vedere Impedire attacchi xsrf/CSRF (Cross-Site Request Forgery) in ASP.NET Core

Per altre informazioni sul middleware, vedere ASP.NET Middleware core e l'elenco di middleware predefiniti che possono essere aggiunti alle applicazioni.

Per altre informazioni sulle API minime, vedere Minimal APIs overview.