Compartir a través de


Módulos, controladores y middleware

Sugerencia

Este contenido es un extracto del libro electrónico "Blazor for ASP.NET Web Forms Developers for Azure" (Blazor para desarrolladores de ASP.NET Web Forms), disponible en Documentación de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.

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

Una aplicación ASP.NET Core se compila sobre una serie de middleware. El middleware lo forman controladores que se organizan en una canalización para controlar solicitudes y respuestas. En una aplicación de Web Forms, los controladores y módulos HTTP solucionan problemas similares. En ASP.NET Core, los módulos, los controladores, Global.asax.cs y el ciclo de vida de la aplicación se reemplazan por middleware. En este capítulo, obtendrá información sobre el middleware en el contexto de una aplicación Blazor.

Información general

La canalización de solicitudes de ASP.NET Core consiste en una secuencia de delegados de solicitud a los que se llama de uno en uno. En el siguiente diagrama se muestra este concepto. El subproceso de ejecución sigue las flechas negras.

pipeline

En el diagrama anterior falta un concepto de eventos de ciclo de vida. Este concepto es fundamental para el modo en que se administran las solicitudes de ASP.NET Web Forms. Este sistema facilita la tarea de pensar en qué proceso se ejecuta y permite insertar middleware en cualquier momento. El middleware se ejecuta en el orden en que se agrega a la canalización de solicitudes. También se agrega en el código en lugar de en archivos de configuración, normalmente en Startup.cs.

Katana

Los lectores familiarizados con Katana se sentirán cómodos en ASP.NET Core. De hecho, Katana es un marco del que se deriva ASP.NET Core. Ha incorporado patrones similares de middleware y canalización para ASP.NET 4.x. El middleware diseñado para Katana se puede adaptar para trabajar con la canalización de ASP.NET Core.

Middleware común

ASP.NET 4.x incluye muchos módulos. De forma similar, ASP.NET Core también tiene muchos componentes de middleware disponibles. En algunos casos, se pueden usar módulos de IIS con ASP.NET Core. En otros, es posible que haya middleware de ASP.NET Core nativo disponible.

En la tabla siguiente se enumeran los componentes y el middleware de reemplazo en ASP.NET Core.

Módulo Módulo ASP.NET 4.x Opción de ASP.NET Core
Errores HTTP CustomErrorModule Middleware de páginas de códigos de estado
Documento predeterminado DefaultDocumentModule Middleware de archivos predeterminados
Examen de directorios DirectoryListingModule Middleware de exploración de directorios
Compresión dinámica DynamicCompressionModule Middleware de compresión de respuestas
Seguimiento de solicitudes con error FailedRequestsTracingModule Registro de ASP.NET Core
Almacenamiento en caché de archivos FileCacheModule Middleware de almacenamiento en caché de respuestas
Almacenamiento en caché HTTP HttpCacheModule Middleware de almacenamiento en caché de respuestas
Registro HTTP HttpLoggingModule Registro de ASP.NET Core
Redirección HTTP HttpRedirectionModule Middleware de reescritura de dirección URL
Filtros ISAPI IsapiFilterModule Middleware
ISAPI IsapiModule Middleware
Filtro de solicitudes RequestFilteringModule IRule de middleware de reescritura de URL
Reescritura de direcciones URL† RewriteModule Middleware de reescritura de dirección URL
Compresión estática StaticCompressionModule Middleware de compresión de respuestas
Contenido estático StaticFileModule Middleware de archivos estáticos
Autorización para URL UrlAuthorizationModule Identidad de ASP.NET Core

Esta lista no es exhaustiva, pero debe dar una idea de la asignación que existe entre los dos marcos. Para obtener una lista más detallada, vea Módulos de IIS con ASP.NET Core.

Middleware personalizado

Es posible que el middleware integrado no controle todos los escenarios necesarios para una aplicación. En esos casos, tiene sentido crear middleware propio. Hay muchas maneras de definir el middleware y la más sencilla es un delegado simple. Considere el middleware siguiente, que acepta una solicitud de referencia cultural de una cadena de consulta:

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}"));
    }
}

El middleware también se puede definir como clase, ya sea mediante la implementación de la interfaz IMiddleware o siguiendo una convención de middleware. Para obtener más información, vea Escritura de middleware de ASP.NET Core personalizado.