using EggLink.DanhengServer.Util; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Server.Kestrel.Core; using System.Net; using System.Diagnostics; namespace EggLink.DanhengServer.WebServer { public class WebProgram { public static void Main(string[] args, int port, string address) { BuildWebHost(args, port, address).Start(); } public static IWebHost BuildWebHost(string[] args, int port, string address) { var b = WebHost.CreateDefaultBuilder(args) .UseStartup() .ConfigureLogging((hostingContext, logging) => { logging.ClearProviders(); }) .UseUrls(address); if (ConfigManager.Config.HttpServer.UseSSL) { b.UseKestrel(options => { options.Listen(IPAddress.Any, port, listenOptions => { listenOptions.UseHttps( ConfigManager.Config.KeyStore.KeyStorePath, ConfigManager.Config.KeyStore.KeyStorePassword ); }); }); } return b.Build(); } } public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Use(async (context, next) => { using var buffer = new MemoryStream(); var request = context.Request; var response = context.Response; var bodyStream = response.Body; response.Body = buffer; await next.Invoke(); buffer.Position = 0; context.Response.Headers["Content-Length"] = (response.ContentLength ?? buffer.Length).ToString(); context.Response.Headers.Remove("Transfer-Encoding"); await buffer.CopyToAsync(bodyStream); }); app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } }