Beispiel #1
0
        /// <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();
        }