using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Logging; namespace ACBuildService; public static class HttpService { public static WebApplication App { get; private set; } public static readonly string BaseRootPath = $"{AppContext.BaseDirectory}wwwroot/"; public static async Task Start() { var builder = WebApplication.CreateBuilder(); // 添加控制器服务 builder.Services.AddControllers(); builder.WebHost.UseKestrel(options => { //设置最大1G, 这里的单位是byte options.Limits.MaxRequestBodySize = int.MaxValue; // HTTP if (ACBuildService.App.Settings.HttpPort > 0) { options.ListenAnyIP(ACBuildService.App.Settings.HttpPort); } }) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Error); }); builder.Services.Configure(x => { x.ValueLengthLimit = int.MaxValue; x.MultipartBodyLengthLimit = int.MaxValue; }); var contentTypeProvider = new FileExtensionContentTypeProvider(); contentTypeProvider.Mappings.Add(".bundle", "application/octet-stream"); contentTypeProvider.Mappings.Add(".meta", "application/octet-stream"); contentTypeProvider.Mappings.Add(".bytes", "application/octet-stream"); Log.Info($"wwwroot={BaseRootPath}"); App = builder.Build(); // 针对 files 文件夹配置 var fileServerOptions = new FileServerOptions { RequestPath = "/files", EnableDirectoryBrowsing = true, FileProvider = new PhysicalFileProvider(BaseRootPath), StaticFileOptions = { ContentTypeProvider = contentTypeProvider } }; App.UseFileServer(fileServerOptions); // 使用控制器路由 App.MapControllers(); // 不再需要手动映射路由 // App.MapGet("/", HttpHandler.Index); // App.MapPost("/api", HttpHandler.Api); await App.StartAsync(); Log.Info("http 服务启动成功"); } }