using Autofac; using Autofac.Configuration; using Autofac.Extensions.DependencyInjection; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; using NLog; using Rhea.Common; using Sundial; using System; using System.IO; using System.Linq; using System.Reflection; using Tiger.Api.Controllers; using Tiger.Api.DbCache; using Tiger.IBusiness; using Tiger.IBusiness.Utility; namespace Tiger.Api { public class Startup { public string version => $"V{(Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute)).First() as AssemblyFileVersionAttribute).Version}"; public readonly string anyAllowSpecificOrigins = "any"; public Startup(IConfiguration configuration) { Configuration = configuration; //初始化 ApiConfig ApiConfig.InitConfig(configuration); //测试代码 //ConsoleExt.WriteLine(""); //Console.Read(); //var t = Biz.GetBackupWIP_SN("test"); //var l = Biz.Language.GetJson("zh-CN"); ; //删除一个月前的日志 DeleteLogs(); } /// /// /// public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. /// /// /// /// public void ConfigureServices(IServiceCollection services) { //services.RegisterAssembly("Tiger.Service"); //services.AddTransient(typeof(IBaseService<>), typeof(BaseService<>)); services.AddControllersWithViews().AddExtraControllers().AddNewtonsoftJson(opt => { opt.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); opt.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; }); //services.AddControllers().AddApplicationPart(typeof(_WMSTestController).Assembly); //services.AddControllers(); //配置跨域处理cors             services.AddCors(options => { options.AddPolicy(anyAllowSpecificOrigins, corsbuilder => { var corsPath = Configuration.GetSection("CorsPaths").GetChildren().Select(p => p.Value).ToArray(); corsbuilder.WithOrigins(corsPath) .AllowAnyMethod() .AllowAnyHeader(); //.AllowCredentials();//指定处理cookie                 }); }); services.AddSwaggerGen(c => { c.SwaggerDoc(version, new OpenApiInfo { Title = "Tiger API", Version = version }); var basePath = AppDomain.CurrentDomain.BaseDirectory; var xmlPath = Path.Combine(basePath, "Tiger.Api.xml"); c.IncludeXmlComments(xmlPath); }); //注册定时任务服务 services.AddSchedule(); //services.AddTransient(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. /// /// /// /// /// public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //初始化 BizConfig var bizConfig = (new ConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory).AddJsonFile("BizSettings.json")).Build(); //BizConfig.InitConfig(bizConfig); BizConfig.InitConfig(bizConfig, DI.Resolve().GetDictionary()); //加载配置文件 NLog.LogManager.Setup().LoadConfigurationFromFile("nlog.config").GetCurrentClassLogger(); app.UseMiddleware(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"Tiger API {version}"); }); app.UseRouting(); app.UseCors(anyAllowSpecificOrigins);//支持跨域:允许特定来源的主机访问 //app.UseHttpsRedirection(); app.UseStaticFiles(); //app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}").RequireCors(anyAllowSpecificOrigins); endpoints.MapControllers().RequireCors(anyAllowSpecificOrigins); }); ConsoleExt.Write($"Api Run as{((ApiConfig.IsDevVersion || ApiConfig.IsTestVersion) ? ((ApiConfig.IsDevVersion ? " Dev" : "") + (ApiConfig.IsTestVersion ? " Test" : "")) : " Release")} Edition", ConsoleColor.Cyan); //连接至数据库 if (BizConfig.Configuration["IsTestServer"].ToLower() == "true") { ConsoleExt.WriteLine($", Link to Test {BizConfig.Configuration["Databases:Test:DbType"]} Database, " + BizConfig.Configuration[$"Databases:Test:ConnectionString"].Split(';').Where(q => q.Contains("server")).FirstOrDefault() + (BizConfig.Configuration[$"Databases:Test:ConnectionString"].Split(';').Any(q => q.Contains("server")) ? "," : "") + BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Where(q => q.Contains("port")).FirstOrDefault() + (BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Any(q => q.Contains("port")) ? "," : "") + BizConfig.Configuration[$"Databases:Test:ConnectionString"].Split(';').Where(q => q.Contains("Data Source") || q.Contains("DataSource") || q.Contains("database")).FirstOrDefault(), ConsoleColor.Cyan); } else { ConsoleExt.WriteLine($", Link to Formal {BizConfig.Configuration["Databases:Main:DbType"]} Database, " + BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Where(q => q.Contains("server")).FirstOrDefault() + (BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Any(q => q.Contains("server")) ? "," : "") + BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Where(q => q.Contains("port")).FirstOrDefault() + (BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Any(q => q.Contains("port")) ? "," : "") + BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Where(q => q.Contains("Data Source") || q.Contains("DataSource") || q.Contains("database")).FirstOrDefault(), ConsoleColor.Cyan); } //初始化Business的AutoFacContainer DI.Resolve().SetContainer(AutoFacContainer.Instance); //开启Api监控总线 DI.Resolve().StartMonitors(); //开启服务总线 DI.Resolve().StartServices(app.ApplicationServices.GetService()); //开启DB缓存自动更新 //DI.Resolve().StartAutoUpdate(); DbCacheBus.StartAutoUpdate(); //开启MQTT服务 MQTTHelper.Start(); } /// /// 删除一个月前的Log /// public void DeleteLogs() { DirectoryInfo di = new (AppDomain.CurrentDomain.BaseDirectory + "\\Logs"); if(di.Exists) { var logFiles = di.GetFiles("*.log", SearchOption.AllDirectories); foreach (var file in logFiles) { if ((DateTime.Now - file.LastWriteTime).TotalDays > 30) { file.Delete(); } } } } }//endClass }