using Microsoft.OpenApi.Models; using System.Text.Encodings.Web; using System.Text.Unicode; using Gs.Toolbox; using Newtonsoft.Json.Serialization; using Newtonsoft.Json; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); }).AddMvcOptions((opt) => { opt.Filters.Add(); }).AddNewtonsoftJson(opt => { opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // opt.SerializerSettings.ContractResolver = new DefaultContractResolver(); opt.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); opt.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; }); builder.Services.AddCustomConvention(); builder.AddCustomInject(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddHttpContextAccessor(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "GS-MES Api¿ª·¢Îĵµ", Version = "v1" }); var xmlFiles = Directory.GetFiles(AppContext.BaseDirectory + Gs.Toolbox.AppSettingsHelper.getValueByKey("ServicesPath"), "*.xml"); foreach (var file in xmlFiles) { c.IncludeXmlComments(file, true); } //Ìí¼Ó·Ö×鶨Òå typeof(ApiGroupNames).GetFields().Skip(1).ToList().ForEach(f => { var info = f.GetCustomAttributes(typeof(GroupInfoAttribute), false).OfType().FirstOrDefault(); c.SwaggerDoc(f.Name, new OpenApiInfo { Title = info?.Title, Version = info?.Version, Description = info?.Description }); }); c.SwaggerDoc("NoGroup", new OpenApiInfo { Title = "ÎÞ·Ö×é" }); c.DocInclusionPredicate((docName, apiDescription) => { if (docName == "NoGroup") { return string.IsNullOrEmpty(apiDescription.GroupName); } else { return apiDescription.GroupName == docName; } }); //Ìí¼Ó°²È«¶¨Òå c.AddSecurityDefinition("Token", new OpenApiSecurityScheme { Description = "ÇëÊäÈëtoken,¸ñʽΪ£ºtoken 3fa85f64-5717-4562-b3fc-2c963f66afa6£¨×¢ÒâÖÐ¼ä±ØÐëÓпոñ£©", Name = "token", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, BearerFormat = "JWT", Scheme = "Bearer" }); //Ìí¼Ó°²È«ÒªÇó c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme{ Reference =new OpenApiReference{ Type = ReferenceType.SecurityScheme, Id ="Token" } },new string[]{ } } }); }); builder.Services.AddSingleton(builder.Services); var app = builder.Build(); app.AddCustomController(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); //Ìí¼Ó·Ö×鶨Òå app.UseSwaggerUI(options => { typeof(ApiGroupNames).GetFields().Skip(1).ToList().ForEach(f => { var info = f.GetCustomAttributes(typeof(GroupInfoAttribute), false).OfType().FirstOrDefault(); options.SwaggerEndpoint($"/swagger/{f.Name}/swagger.json", info != null ? info.Title : f.Name); }); options.SwaggerEndpoint("/swagger/NoGroup/swagger.json", "ÎÞ·Ö×é"); }); } app.UseAuthorization(); app.MapControllers(); app.Run();