12. El pipeline de middleware
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
El middleware de ASP.NET Core es control de flujo anidado. El código antes de next se ejecuta al entrar; el código posterior, al salir. El orden de registro es comportamiento observable.
La cebolla es ejecutable
Sección titulada «La cebolla es ejecutable»GET /ok: 200; outer:before -> endpoint -> outer:afterEl gate hace short-circuit de /blocked:
GET /blocked: 429; outer:before -> gate:short-circuit -> outer:afterEl endpoint no aparece porque el gate no llama next. El middleware exterior sí completa su camino de respuesta.
Reglas de orden con consecuencias
Sección titulada «Reglas de orden con consecuencias»- el handler de excepciones debe envolver el código que convierte;
- forwarded headers preceden a lectores de scheme, host o client IP;
- routing selecciona endpoint antes de autorización basada en metadatos;
- autenticación establece principal antes de autorización;
- un
Runterminal finaliza su rama.
Map ramifica por ruta y MapWhen por predicado. Una rama no es un nuevo proceso ni una frontera de confianza.
Ejecutar la prueba
Sección titulada «Ejecutar la prueba»dotnet run --project code/csharp-advanced/Advanced -c Release -- l12La salida verificada es expected/l12.txt.
Ejercicios
Sección titulada «Ejercicios»- Pon el handler de excepción después de un endpoint que lanza.
- Añade un correlation ID y decide cómo tratar uno proporcionado por el cliente.
- Añade una rama
/adminy prueba que la autorización se ejecuta.
Soluciones
- Solo puede envolver componentes registrados después; muévelo antes.
- Valida la entrada, consérvala solo como baggage no confiable y genera el ID de servidor para logs.
- Coloca autorización en la rama o usa metadatos de endpoint. La ruta sola no concede autoridad.