/// <summary> /// Start /// </summary> public void Start() { Stop(); _host = WebHost.CreateDefaultBuilder() .UseKestrel(options => options.Listen(EndPoint.Address, EndPoint.Port, listenOptions => { if (string.IsNullOrEmpty(HTTPSCertFile)) { return; } listenOptions.UseHttps(HTTPSCertFile, HTTPSCertificatePassword, httpsConnectionAdapterOptions => { //if (trustedAuthorities is null || trustedAuthorities.Length == 0) // return; //httpsConnectionAdapterOptions.ClientCertificateMode = ClientCertificateMode.RequireCertificate; //httpsConnectionAdapterOptions.ClientCertificateValidation = (cert, chain, err) => //{ // if (err != SslPolicyErrors.None) // return false; // X509Certificate2 authority = chain.ChainElements[chain.ChainElements.Count - 1].Certificate; // return trustedAuthorities.Contains(authority.Thumbprint); //}; }); })) .Configure(app => { app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "TuringMachine API V1"); }); app.UseResponseCompression(); app.UseRouting(); app.UseEndpoints(endpoints => endpoints.MapControllers()); }) .ConfigureServices(services => { services.AddSingleton(this); services.AddSingleton <ConfigsController, ConfigsController>(); services.AddSingleton <ConnectionsController, ConnectionsController>(); services.AddSingleton <InputsController, InputsController>(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo() { Title = "TuringMachine API", Version = "v1" }); }); services .AddMvcCore() .AddApiExplorer() .AddControllersAsServices() .AddNewtonsoftJson(c => { SerializationHelper.Configure(c.SerializerSettings); }); services.AddLogging(builder => { if (Debugger.IsAttached) { builder .ClearProviders() .AddConsole(); } else { builder .ClearProviders() .AddFilter("Microsoft", LogLevel.Warning) .AddFilter("System", LogLevel.Warning) .AddFilter("NToastNotify", LogLevel.Warning) .AddEventLog(); } }); services.AddResponseCompression(options => { // options.EnableForHttps = false; options.Providers.Add <GzipCompressionProvider>(); options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] { "application/json" }); }); services.Configure <GzipCompressionProviderOptions>(options => { options.Level = CompressionLevel.Fastest; }); }) .Build(); _host.Start(); }