// backend/src/Titulares.Api/Program.cs using Titulares.Api.Data; using Titulares.Api.Hubs; using Titulares.Api.Models; using Titulares.Api.Services; using Titulares.Api.Workers; using Microsoft.AspNetCore.HttpOverrides; var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddJsonFile("configuracion.json", optional: false, reloadOnChange: true); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.Configure(builder.Configuration); // Añadimos nuestro repositorio personalizado builder.Services.AddSingleton(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); var frontendUrl = "http://192.168.5.128:8905"; builder.Services.AddCors(options => { options.AddPolicy("AllowReactApp", policyBuilder => { policyBuilder.WithOrigins(frontendUrl) .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); builder.Services.Configure(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; options.KnownNetworks.Clear(); options.KnownProxies.Clear(); }); builder.Services.AddSignalR(); builder.Services.AddHostedService(); // Añadimos los servicios de autorización (necesario para app.UseAuthorization) builder.Services.AddAuthorization(); // 2. Construir la aplicación. // ========================== var app = builder.Build(); // DEBE IR ANTES DE UseRouting, UseCors, UseAuthorization, etc. app.UseForwardedHeaders(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } // 3. Configurar el pipeline de peticiones HTTP. // ============================================ if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } // COMENTAMOS LA REDIRECCIÓN HTTPS PORQUE TRABAJAMOS CON HTTP // app.UseHttpsRedirection(); // 1. Activa el enrutamiento para que la app sepa a dónde va la petición. app.UseRouting(); // 2. APLICA LA POLÍTICA DE CORS. app.UseCors("AllowReactApp"); // 3. Usamos la autorización. app.UseAuthorization(); // 4. Mapeamos los endpoints (Controladores y Hubs). app.MapControllers(); app.MapHub("/titularesHub"); app.Run();