Condividi tramite


Moduli, gestori e software intermedio

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.

Anteprima della copertina dell'eBook Blazor-for-ASP-NET-Web-Forms-Developers.

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.

oleodotto

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.