128 lines
4.1 KiB
C#
128 lines
4.1 KiB
C#
using Microsoft.AspNetCore.Builder;
|
||
using Microsoft.AspNetCore.Hosting;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using Microsoft.Extensions.DependencyInjection;
|
||
using Microsoft.OpenApi.Models;
|
||
using Swashbuckle.AspNetCore.Filters;
|
||
using Swashbuckle.AspNetCore.SwaggerGen;
|
||
using Swashbuckle.AspNetCore.SwaggerUI;
|
||
using System;
|
||
using System.ComponentModel;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Reflection;
|
||
|
||
namespace IRaCIS.Core.API;
|
||
|
||
public enum SwaggerVersion
|
||
{
|
||
[Description("医生模块")]
|
||
Reviewer = 1,
|
||
[Description("项目模块")]
|
||
Trial = 2,
|
||
[Description("入组模块")]
|
||
Enroll = 3,
|
||
[Description("工作量模块")]
|
||
Workload = 4,
|
||
[Description("通用信息获取")]
|
||
Common = 5,
|
||
[Description("机构信息模块")]
|
||
Institution = 6,
|
||
[Description("统计模块")]
|
||
DashboardStatistics = 7,
|
||
[Description("财务模块")]
|
||
Financial = 8,
|
||
[Description("管理模块")]
|
||
Management =9,
|
||
[Description("影像模块")]
|
||
Image =10,
|
||
[Description("读片模块")]
|
||
Reading =11
|
||
};
|
||
|
||
|
||
public static class SwaggerSetup
|
||
{
|
||
public static void AddSwaggerSetup(this IServiceCollection services)
|
||
{
|
||
services.AddEndpointsApiExplorer();
|
||
services.AddSwaggerGen(options =>
|
||
{
|
||
|
||
typeof(SwaggerVersion).GetFields(BindingFlags.Public | BindingFlags.Static).ToList()
|
||
.ForEach(field =>
|
||
{
|
||
var description = field.GetCustomAttribute<DescriptionAttribute>()?.Description ?? field.Name;
|
||
options.SwaggerDoc(field.Name, new Microsoft.OpenApi.Models.OpenApiInfo
|
||
{
|
||
Version = field.Name,
|
||
Description = $"{field.Name} API",
|
||
Title = description // 使用Description作为Title
|
||
});
|
||
});
|
||
|
||
// 接口排序
|
||
options.OrderActionsBy(o => o.GroupName);
|
||
|
||
//添加注释
|
||
var basePath = AppContext.BaseDirectory;
|
||
var xmlPath1 = Path.Combine(basePath, "IRaCIS.Core.Application.xml");
|
||
var xmlPath2 = Path.Combine(basePath, "IRaCIS.Core.API.xml");
|
||
options.IncludeXmlComments(xmlPath1, true);
|
||
options.IncludeXmlComments(xmlPath2, true);
|
||
|
||
// 在header中添加token,传递到后台
|
||
options.OperationFilter<SecurityRequirementsOperationFilter>();
|
||
|
||
|
||
// 添加登录按钮
|
||
options.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme()
|
||
{
|
||
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
|
||
Name = "Authorization",
|
||
//In = "header",
|
||
//Type = "apiKey"
|
||
});
|
||
|
||
});
|
||
}
|
||
|
||
|
||
|
||
public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
||
{
|
||
app.UseSwagger();
|
||
app.UseSwaggerUI(options =>
|
||
{
|
||
typeof(SwaggerVersion).GetFields(BindingFlags.Public | BindingFlags.Static).ToList()
|
||
.ForEach(field =>
|
||
{
|
||
var description = field.GetCustomAttribute<DescriptionAttribute>()?.Description ?? field.Name;
|
||
options.SwaggerEndpoint($"swagger/{field.Name}/swagger.json", $"{description}");
|
||
});
|
||
|
||
|
||
var data = Assembly.GetExecutingAssembly().Location;
|
||
options.IndexStream = () => Assembly.GetExecutingAssembly()
|
||
.GetManifestResourceStream("IRaCIS.Core.API.wwwroot.swagger.ui.Index.html");
|
||
|
||
//路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件,
|
||
//注意localhost:8001/swagger是访问不到的,去launchSettings.json把launchUrl去掉,如果你想换一个路径,直接写名字即可,比如直接写c.Route = "doc";
|
||
options.RoutePrefix = string.Empty;
|
||
|
||
//DocExpansion设置为none可折叠所有方法
|
||
options.DocExpansion(DocExpansion.None);
|
||
|
||
//DefaultModelsExpandDepth设置为 - 1 可不显示models
|
||
options.DefaultModelsExpandDepth(-1);
|
||
});
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
}
|