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 9 di questo articolo.
Avviso
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 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 9 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à chiamatoUseRouting
e se sono stati configurati endpoint, ad esempioapp.MapGet
.UseEndpoints
viene aggiunto alla fine della pipeline middleware se sono configurati endpoint.UseAuthentication
viene aggiunto immediatamente dopoUseRouting
se il codice utente non ha già chiamatoUseAuthentication
e seIAuthenticationSchemeProvider
è possibile rilevare nel provider di servizi.IAuthenticationSchemeProvider
viene aggiunto per impostazione predefinita quando si usanoAddAuthentication
i servizi e viene rilevato tramiteIServiceProviderIsService
.UseAuthorization
viene aggiunto successivamente se il codice utente non ha già chiamatoUseAuthorization
e seIAuthorizationHandlerProvider
è possibile rilevare nel provider di servizi.IAuthorizationHandlerProvider
viene aggiunto per impostazione predefinita quando si usanoAddAuthorization
i servizi e viene rilevato tramiteIServiceProviderIsService
.- Il middleware e gli endpoint configurati dall'utente vengono aggiunti tra
UseRouting
eUseEndpoints
.
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
eUseEndpoints
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à chiamatoUseRouting
e se sono stati configurati endpoint, ad esempioapp.MapGet
.UseEndpoints
viene aggiunto alla fine della pipeline middleware se sono configurati endpoint.UseAuthentication
viene aggiunto immediatamente dopoUseRouting
se il codice utente non ha già chiamatoUseAuthentication
e seIAuthenticationSchemeProvider
è possibile rilevare nel provider di servizi.IAuthenticationSchemeProvider
viene aggiunto per impostazione predefinita quando si usanoAddAuthentication
i servizi e viene rilevato tramiteIServiceProviderIsService
.UseAuthorization
viene aggiunto successivamente se il codice utente non ha già chiamatoUseAuthorization
e seIAuthorizationHandlerProvider
è possibile rilevare nel provider di servizi.IAuthorizationHandlerProvider
viene aggiunto per impostazione predefinita quando si usanoAddAuthorization
i servizi e viene rilevato tramiteIServiceProviderIsService
.- Il middleware e gli endpoint configurati dall'utente vengono aggiunti tra
UseRouting
eUseEndpoints
.
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
eUseEndpoints
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
.