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<ApiAuthorizeAttribute>();
|
}).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.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<GroupInfoAttribute>().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<GroupInfoAttribute>().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();
|