using BBWYB.Common.Extensions; using BBWYB.Common.Http; using BBWYB.Common.Log; using BBWYB.Common.Models; using BBWYB.Server.API.Filters; using BBWYB.Server.API.Middlewares; using BBWYB.Server.Business; using BBWYB.Server.Model; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using Newtonsoft.Json.Serialization; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.PurchasePlatform.Client; using System.Reflection; using System.Text; using Yitter.IdGenerator; var builder = WebApplication.CreateBuilder(args); var services = builder.Services; var configuration = builder.Configuration; services.AddMemoryCache(); var idOption = new IdGeneratorOptions(1); var idGenerator = new DefaultIdGenerator(idOption); services.AddSingleton(typeof(IIdGenerator), idGenerator); var fsql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("DB")).Build(); services.AddSingleton(typeof(IFreeSql), fsql); var fsql2 = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("MDSDB")).Build(); services.AddSingleton(new FreeSqlMultiDBManager() { BBWYfsql = fsql, MDSfsql = fsql2 }); services.AddSingleton<NLogManager>(); services.AddSingleton<RestApiService>(); services.AddSingleton<TaskSchedulerManager>(); services.AddMemoryCache(); services.AddControllers(); services.AddHttpContextAccessor(); services.AddHttpClient(); services.AddHttpClient("gzip").ConfigurePrimaryHttpMessageHandler(handler => new HttpClientHandler() { AutomaticDecompression = System.Net.DecompressionMethods.GZip }); services.AddCors(options => { options.AddPolicy("cors", p => { p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader(); }); }); services.BatchRegisterServices(new Assembly[] { Assembly.Load("BBWYB.Server.Business") }, typeof(IDenpendency)); services.AddSingleton<OP_PlatformClientFactory>(); services.AddSingleton<PP_PlatformClientFactory>(); services.AddSingleton<ExpressCompanyNameConverter>(); services.AddMapper(new MappingProfiles()); services.AddControllers(c => { c.Filters.Add<ResultFilter>(); c.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true; }).AddNewtonsoftJson(setupAction => { setupAction.SerializerSettings.ContractResolver = new DefaultContractResolver(); setupAction.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; //setupAction.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore; //setupAction.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include; }); //.AddJsonOptions(c => c.JsonSerializerOptions.PropertyNamingPolicy = null); //services.ConfigureJsonFormatter(configuration: (f) => //{ // f.SetDateTimeFormat("yyyy-MM-dd HH:mm:ss"); // //f.JsonFormatter.Options = Swifter.Json.JsonFormatterOptions.IgnoreNull | // // Swifter.Json.JsonFormatterOptions.IgnoreZero | // // Swifter.Json.JsonFormatterOptions.IgnoreEmptyString; //}); services.AddEndpointsApiExplorer(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1.0.0", Title = "����ΪӯB��API", Description = "ע������\r\n1.���ز������Ʋ��ô��շ�����\r\n2.ApiResponseΪ�������ض���(Code,Data,Message),�ӿ������еķ���ֵ������Data����\r\n3.��������Code=200" }); //JWT��֤ c.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, new OpenApiSecurityScheme { Scheme = JwtBearerDefaults.AuthenticationScheme, BearerFormat = "JWT", Type = SecuritySchemeType.ApiKey, Name = "Authorization", In = ParameterLocation.Header, Description = "Authorization:Bearer {your JWT token}<br/>", }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme{Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = JwtBearerDefaults.AuthenticationScheme } }, new string[] { } } }); var executingAssembly = Assembly.GetExecutingAssembly(); var assemblyNames = executingAssembly.GetReferencedAssemblies().Union(new AssemblyName[] { executingAssembly.GetName() }).ToArray(); Array.ForEach(assemblyNames, (assemblyName) => { //var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlFile = $"{assemblyName.Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); if (!File.Exists(xmlPath)) return; c.IncludeXmlComments(xmlPath, true); }); }); var secret = configuration.GetSection("Secret").Value; services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, x => { x.SaveToken = true; x.RequireHttpsMetadata = false; x.TokenValidationParameters = new TokenValidationParameters() { ClockSkew = TimeSpan.Zero, ValidateIssuerSigningKey = true, ValidateIssuer = false, ValidateAudience = false, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)), //ValidIssuer = issuer, //ValidAudience = audience, //ValidateLifetime = true }; }); var app = builder.Build(); // Configure the HTTP request pipeline. //yunDingBusiness.RefreshKey(); var isAllowedSwagger = configuration.GetValue<bool>("AllowedSwagger"); if (isAllowedSwagger) { app.UseSwagger(c => c.SerializeAsV2 = true) .UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "BBWYB API"); c.RoutePrefix = string.Empty; }); } //app.UseHttpsRedirection(); app.UseMiddleware<CustomExceptionMiddleWare>(); app.UseRouting(); app.UseCors("cors"); app.UseAuthorization(); app.MapControllers(); app.Run();