Condividi tramite


Moduli, gestori e middleware

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.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

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 Forms i gestori HTTP e i moduli risolveranno problemi simili. In ASP.NET Core, moduli, gestori, Global.asax.cse il ciclo di vita dell'app vengono sostituiti con middleware. In questo capitolo si apprenderà a conoscere il middleware nel contesto di un'app Blazor.

Panoramica

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 seguente le frecce nere.

pipeline

Il diagramma precedente non dispone di un concetto di eventi del ciclo di vita. Questo concetto è fondamentale per la gestione delle richieste di Web Forms 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 ASP.NET modulo 4.x Opzione di ASP.NET Core
Errori HTTP CustomErrorModule Middleware delle tabelle codici di stato
Documento predefinito DefaultDocumentModule Middleware dei file predefiniti
Esplorazione directory DirectoryListingModule Middleware di esplorazione directory
Compressione dinamica DynamicCompressionModule Middleware di compressione delle risposte
Traccia delle richieste non riuscite FailedRequestsTracingModule Registrazione di ASP.NET Core
Memorizzazione nella cache dei file FileCacheModule Middleware di memorizzazione nella cache delle risposte
Memorizzazione nella cache HTTP HttpCacheModule Middleware di memorizzazione nella cache delle risposte
Registrazione HTTP HttpLoggingModule Registrazione di ASP.NET Core
Reindirizzamento HTTP HttpRedirectionModule Middleware di riscrittura URL
Filtri ISAPI IsapiFilterModule Middleware
ISAPI IsapiModule Middleware
Filtro richieste RequestFilteringModule URL Riscrittura middleware IRule
Riscrittura dell’URL† RewriteModule Middleware di riscrittura URL
Compressione statica StaticCompressionModule Middleware di compressione delle risposte
Contenuto statico StaticFileModule Middleware dei file statici
Autorizzazione URL UrlAuthorizationModule Identità di ASP.NET Core

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 semplice essere un delegato semplice. Si consideri il middleware seguente, che accetta una richiesta delle impostazioni 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 middleware. Per altre informazioni, vedere Scrivere middleware personalizzato ASP.NET Core.