winform+dev的前后台分离标准项目
lg
2024-08-27 978d57ea2e89b07508f01f800ee97b36f19adec2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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();