using Hangfire; using Hangfire.Dashboard; using LearningOfficer.OA.Common.Configs; using LearningOfficer.OA.Infrastructure.RabbitMQ; using LearningOfficer.OA.Mobile.Api.CollectionExtensions; using LearningOfficer.OA.Mobile.Api.Filters; using LearningOfficer.OA.Mobile.Api.Helper; using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; using System.Text; using System.Text.Json; using TrackingSystem.SDK; using Yitter.IdGenerator; namespace LearningOfficer.OA.Mobile.Api { public class Startup { public IConfiguration Configuration { get; } public Startup(IConfiguration configuration) { Configuration = configuration; } public void ConfigureServices(IServiceCollection services, IWebHostEnvironment environment, IHostBuilder hostBuilder) { services.AddControllers().AddJsonOptions(option => { option.JsonSerializerOptions.PropertyNamingPolicy = new CustomJsonNamingPolicy(); }); services.AddControllers(opt => { // 添加全局异常过滤器 opt.Filters.Add(); // 添加统一返回结果过滤器 opt.Filters.Add(); opt.Filters.Add(); //// 添加认证过滤器,限制仅可单设备登录 //opt.Filters.Add(); }).AddNewtonsoftJson(opt => { //忽略循环引用 opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //不改变字段大小 opt.SerializerSettings.ContractResolver = new DefaultContractResolver(); opt.SerializerSettings.ContractResolver = new CustomContractResolver(); //日期类型默认格式化处理 opt.SerializerSettings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }); }); services.AddControllers().AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = new CustomJsonNamingPolicy(); }); // 添加跨域服务 services.AddCors(options => { options.AddDefaultPolicy(builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); services.BatchRegisterServices(); services.AddApiVersion(); services.AddJwtAuth(Configuration); services.AddSwagger(); services.AddHttpClient(); services.AddSerilog(Configuration, hostBuilder, environment); //services.AddRedis(Configuration); services.AddSqlSugar(Configuration, environment); //YitIdHelper.SetIdGenerator(WorkerIdAutoRegisterHelper.GetIdGeneratorOptions()); //services.AddConfigureOptions(Configuration); services.AddHttpContextAccessor(); } public void Configure(WebApplication app, IWebHostEnvironment env) { if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "OA移动端Api v1"); c.SwaggerEndpoint("/swagger/v2/swagger.json", "OA移动端Api v2"); c.SwaggerEndpoint("/swagger/v3/swagger.json", "OA移动端Api v3"); }); } app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); app.Use(async (context, next) => { if (context.Request.Method.Equals("POST", StringComparison.OrdinalIgnoreCase)) { context.Request.EnableBuffering(); using (var reader = new StreamReader(context.Request.Body, encoding: Encoding.UTF8 , detectEncodingFromByteOrderMarks: false, leaveOpen: true)) { var body = await reader.ReadToEndAsync(); context.Items.Add("body", body); context.Request.Body.Position = 0; } } if (context.Request.Method.Equals("Put", StringComparison.OrdinalIgnoreCase)) { context.Request.EnableBuffering(); using (var reader = new StreamReader(context.Request.Body, encoding: Encoding.UTF8 , detectEncodingFromByteOrderMarks: false, leaveOpen: true)) { var body = await reader.ReadToEndAsync(); context.Items.Add("body", body); context.Request.Body.Position = 0; } } await next.Invoke(); }); app.MapControllers(); } } }