using Microsoft.Extensions.FileProviders; using Microsoft.AspNetCore.StaticFiles; using System.IO; using Microsoft.Net.Http.Headers; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // For API controllers var app = builder.Build(); app.MapGet("/api/test", () => "test works!"); // Configure the HTTP request pipeline. // No need for UseHttpsRedirection or UseHsts, as Nginx handles SSL. app.UseDefaultFiles(); // Enable default file serving app.UseStaticFiles(); // Serve static files from wwwroot // Add MIME types for WebAssembly files var provider = new FileExtensionContentTypeProvider(); provider.Mappings[".wasm"] = "application/wasm"; provider.Mappings[".dat"] = "application/octet-stream"; // Serve Blazor WebAssembly files from /batterij-simulator // This must be registered after the default static files but before routing app.Map("/batterij-simulator", appBuilder => { var options = new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "wwwroot", "batterij-simulator")), RequestPath = string.Empty, // Serve from the root of the /batterij-simulator path ContentTypeProvider = provider }; appBuilder.UseStaticFiles(options); appBuilder.UseDefaultFiles(); // Enable default file serving for the subpath }); app.UseRouting(); app.UseAuthorization(); app.MapControllers(); // Map API controllers // Fallback for Blazor WebAssembly to serve index.html for any subpath app.MapFallbackToFile("/batterij-simulator/{*path:nonfile}", "/batterij-simulator/index.html"); app.Run();