Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Suggerimento
Questo contenuto è un estratto dell'eBook, Blazor per gli sviluppatori di Web Forms ASP.NET per Azure, disponibile in .NET Docs o come PDF scaricabile gratuitamente che può essere letto offline.
Un'app ASP.NET Core è basata su una serie di middleware. Il middleware è costituito da gestori disposti in una pipeline per gestire richieste e risposte. In un'app Web Form i gestori HTTP e i moduli risolveranno problemi simili. In ASP.NET Core, moduli, gestori, Global.asax.cs e il ciclo di vita dell'app vengono sostituiti con il middleware. In questo capitolo si apprenderà il middleware nel contesto di un'app Blazor .
Informazioni generali
La pipeline delle richieste ASP.NET Core è costituita da una sequenza di delegati di richiesta, chiamati uno dopo l'altro. Il diagramma seguente illustra il concetto. Il thread di esecuzione segue le frecce nere.
Il diagramma precedente non dispone di un concetto di eventi del ciclo di vita. Questo concetto è fondamentale per la gestione delle richieste di Web Form ASP.NET. Questo sistema rende più semplice ragionare su quale processo si sta verificando e consente l'inserimento del middleware in qualsiasi momento. Il middleware viene eseguito nell'ordine in cui viene aggiunto alla pipeline di richiesta. Vengono aggiunti anche nel codice anziché nei file di configurazione, in genere in Startup.cs.
Katana
I lettori che hanno familiarità con Katana si sentiranno a proprio agio in ASP.NET Core. Katana è infatti un framework da cui deriva ASP.NET Core. Ha introdotto modelli di middleware e pipeline simili per ASP.NET 4.x. Il middleware progettato per Katana può essere adattato per funzionare con la pipeline ASP.NET Core.
Middleware comune
ASP.NET 4.x include molti moduli. In modo simile, ASP.NET Core include anche molti componenti middleware disponibili. I moduli IIS possono essere usati in alcuni casi con ASP.NET Core. In altri casi, il middleware core di ASP.NET nativo potrebbe essere disponibile.
La tabella seguente elenca il middleware e i componenti sostitutivi in ASP.NET Core.
| Modulo | Modulo di ASP.NET 4.x | opzione ASP.NET Core |
|---|---|---|
| Errori HTTP | CustomErrorModule |
Middleware delle tabelle codici di stato |
| Documento predefinito | DefaultDocumentModule |
Middleware per i file di default |
| Esplorazione directory | DirectoryListingModule |
Middleware di esplorazione directory |
| Compressione dinamica | DynamicCompressionModule |
Middleware di compressione delle risposte |
| Traccia delle richieste non riuscite | FailedRequestsTracingModule |
Log di ASP.NET Core |
| Memorizzazione nella cache dei file | FileCacheModule |
Middleware di cache delle risposte |
| Memorizzazione nella cache HTTP | HttpCacheModule |
Middleware di cache delle risposte |
| Registrazione dei log HTTP | HttpLoggingModule |
Log di ASP.NET Core |
| Reindirizzamento HTTP | HttpRedirectionModule |
Middleware di riscrittura URL |
| Filtri ISAPI | IsapiFilterModule |
Middleware |
| ISAPI | IsapiModule |
Middleware |
| Filtro richieste | RequestFilteringModule |
URL Rewriting Middleware IRule |
| Riscrittura URL† | RewriteModule |
Middleware di riscrittura URL |
| Compressione statica | StaticCompressionModule |
Middleware di compressione delle risposte |
| Contenuto statico | StaticFileModule |
Middleware dei file statici |
| Autorizzazione URL | UrlAuthorizationModule |
ASP.NET'identità di base |
Questo elenco non è esaustivo, ma deve dare un'idea del mapping esistente tra i due framework. Per un elenco più dettagliato, vedere Moduli IIS con ASP.NET Core.
Middleware personalizzato
Il middleware predefinito potrebbe non gestire tutti gli scenari necessari per un'app. In questi casi, è opportuno creare il proprio middleware. Esistono diversi modi per definire il middleware, con il più semplice che è un semplice delegato. Si consideri il seguente middleware, che accetta una richiesta della cultura da una stringa di query.
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
var cultureQuery = context.Request.Query["culture"];
if (!string.IsNullOrWhiteSpace(cultureQuery))
{
var culture = new CultureInfo(cultureQuery);
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
}
// Call the next delegate/middleware in the pipeline
await next();
});
app.Run(async (context) =>
await context.Response.WriteAsync(
$"Hello {CultureInfo.CurrentCulture.DisplayName}"));
}
}
Il middleware può anche essere definito come classe, implementando l'interfaccia IMiddleware o seguendo la convenzione del middleware. Per ulteriori informazioni, consultare Sviluppare middleware personalizzato ASP.NET Core.