啊鑫
2 天以前 eb65436c2312821e3e513ab9ada41dd486d6d7cf
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System.Text.Encodings.Web;
using System.Text.Unicode;
using Gs.HostIIS;
using Gs.Toolbox;
using Gs.Toolbox.ApiCore.Extensions;
using Gs.Toolbox.ApiCore.Group;
using Microsoft.Extensions.FileProviders;
using Microsoft.OpenApi.Models;
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 CustomContractResolver();
        // opt.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        opt.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
    });
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAll", builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowAnyHeader();
    });
});
builder.Services.AddCustomConvention();
builder.AddCustomInject();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddHttpContextAccessor();
builder.Services.Configure<IISServerOptions>(options =>
{
    options.MaxRequestBodySize = int.MaxValue;
});
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1",
        new OpenApiInfo { Title = "GS-MES Api开发文档", Version = "v1" });
    var _xmlPath = AppContext.BaseDirectory +
                   AppSettingsHelper.getValueByKey("ServicesPath");
    var xmlFiles = Directory.GetFiles(_xmlPath, "*.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);
        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.UseCors("AllowAll");
//添加下载路径
var _xlslPath = AppContext.BaseDirectory +
                AppSettingsHelper.getValueByKey("DownPath");
if (!Directory.Exists(_xlslPath)) Directory.CreateDirectory(_xlslPath);
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(_xlslPath),
    RequestPath = "/down"
});
//添加上传路径
var _upPath = AppContext.BaseDirectory +
                AppSettingsHelper.getValueByKey("UploadPath");
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(_upPath),
    RequestPath = "/upload"
});
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();