📊 Resumen del Middleware
El MiddlewareExtensions es un componente de configuración del sistema RestMaster que proporciona extensiones para registrar y configurar todos los middlewares de forma fluida y organizada. Este archivo centraliza la configuración de middlewares y proporciona una API limpia para su registro en el pipeline de la aplicación.
🎯 Funcionalidades Principales
- Registro fluido: API fluida para registrar middlewares
- Centralización: Punto único de configuración de middlewares
- Fluent API: Métodos de extensión encadenables
- Configuración simplificada: Reduce complejidad en Program.cs
- Mantenibilidad: Fácil agregar o remover middlewares
- Consistencia: Patrón uniforme para todos los middlewares
- Documentación: Métodos auto-documentados
- Flexibilidad: Permite configuración condicional
📋 Orden de Ejecución Recomendado
🎯 Pipeline Optimizado
- UseSpanishCulture(): Configuración de cultura (primero)
- UseGrafanaLogging(): Logging de inicio de petición
- UseJwtLogging(): Logging de autenticación
- UseJwtAutoRefresh(): Renovación de tokens
- DayOpenValidationMiddleware: Validación de día abierto
- UseErrorHandling(): Manejo de errores (último)
📊 Ejemplo de Configuración Completa
// En Program.cs
app.UseSpanishCulture();
app.UseGrafanaLogging();
app.UseJwtLogging();
app.UseJwtAutoRefresh();
app.UseDayOpenValidation(); // Si está disponible
app.UseErrorHandling();
⚠️ Consideraciones de Orden
- Cultura primero: Configuración cultural debe ser lo primero
- Logging temprano: GrafanaLogging debe ir antes de otros middlewares
- JWT secuencial: JwtLogging antes que JwtAutoRefresh
- Validaciones intermedias: DayOpenValidation después de autenticación
- Errores último: ErrorHandling debe ser el último middleware
🔗 Integración con Program.cs
🎯 Configuración Típica en Program.cs
var builder = WebApplication.CreateBuilder(args);
// Configuración de servicios
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// Configuración de middlewares
builder.Services.AddHttpClient();
builder.Services.AddScoped<ITelegramService, TelegramService>();
builder.Services.AddScoped<DbWorkingContextHelper>();
var app = builder.Build();
// Configuración del pipeline de middlewares
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseSpanishCulture();
app.UseGrafanaLogging();
app.UseJwtLogging();
app.UseJwtAutoRefresh();
app.UseDayOpenValidation();
app.UseAuthorization();
app.UseErrorHandling();
app.MapControllers();
app.Run();
📊 Configuración Condicional
// Configuración basada en entorno
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
// Configuración basada en configuración
if (builder.Configuration.GetValue<bool>("EnableGrafanaLogging"))
{
app.UseGrafanaLogging();
}
// Configuración basada en features
if (builder.Configuration.GetValue<bool>("EnableJwtAutoRefresh"))
{
app.UseJwtAutoRefresh();
}