using DAL; using HRD.AppLogger; using HRD.WebApi; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using NLog.Web; using StaffDBServer.Extends; using StaffDBServer.SharedExtensions; using System; using System.Reflection; using HRD.LDAPService.JWT; using HRD.WebApi.DAL.Middleware; using HRD.WebApi.Helpers; AppDomain.CurrentDomain.UnhandledException += (object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs) => { ILoggerManager logger = new LoggerManager(); logger.LogException((Exception)unhandledExceptionEventArgs.ExceptionObject, "Application closed due to exception."); NLog.LogManager.Flush(); }; IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json", true, true).Build(); WebApiConfig.Init(configuration, Assembly.GetExecutingAssembly().GetName()); ILoggerManager logger = new LoggerManager(); logger.LogWarn($"[Start WebApi Server] BaseDirectory: {AppDomain.CurrentDomain.BaseDirectory}; TargetFrameworkName: {AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName}"); try { var builder = WebApplication.CreateBuilder(args); // Configure logging builder.Logging.ClearProviders(); builder.Logging.SetMinimumLevel(LogLevel.Warning); builder.Host.UseNLog(); // Add services to the container builder.Services.ConfigureWebApiExtensionsAtFirst(); // at first builder.Services.ConfigureRepositoryWrapper(); // add repos var cnnStr = WebApiConfig.ConnectionString(EN_ConnectionType.SQLServer); builder.Services.AddDbContext(options => { const int dbTimeoutInMin = 5; options.UseSqlServer(cnnStr, opts => opts.CommandTimeout((int)TimeSpan.FromMinutes(dbTimeoutInMin).TotalSeconds)); }); builder.Services.AddStaffDBRepositories(); builder.Services.ConfigureWebApiExtensionsEnd(); // should come last var app = builder.Build(); ((IApplicationBuilder)app).ApplicationServices.SetupNLogServiceLocator(); // Configure the HTTP request pipeline if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } app.AddCustomExceptionHandling(); app.UseHttpsRedirection(); app.UseRouting(); app.UseCors("AllowAllOrigins"); app.UseDefaultFiles(); app.UseStaticFiles(); app.UseOpenApi(); app.UseDALMiddleware(); app.UseJwtMiddleware(); app.ConfigureSwagger(); app.MapControllers(); app.Run(); } catch (Exception ex) { logger.LogException(ex, "Stopped program because of exception"); throw; } finally { // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux) NLog.LogManager.Flush(); NLog.LogManager.Shutdown(); }