Asp.net-Core
Swagger Swashbuckle Asp.NET Core:顯示使用的每個列舉的詳細資訊
我有以下列舉:
public enum TicketQuestionType { General = 1, Billing = 2, TMS = 3, HOS = 4, DeviceManagement = 5 }和模型類:
public class TicketCreateApi { public string Subject { get; set; } public TicketQuestionType QuestionType { get; set; } = TicketQuestionType.General; public TicketType Type { get; set; } = TicketType.Problem; public TicketStatus Status { get; set; } = TicketStatus.New; public TicketPriority Priority { get; set; } = TicketPriority.Normal; public string Description { get; set; } public List<string> Attachments { get; set; } public int? DeviceId { get; set; } public int? DriverId { get; set; } }我的 API 方法使用它:
Task<IActionResult> Create(TicketCreateApi model);Swagger 生成以下內容:
和這個:
因此,我們只能看到預設值,而無法看到可用的列舉列表(名稱和值)。我想展示它。怎麼做?
我們只能看到預設值,無法看到可用的列舉列表(名稱和值)。我想展示它。怎麼做?
要在 swagger 中將列舉顯示為字元串,請配置 JsonStringEnumConverter,在 ConfigureServices 中添加以下行:
services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));輸出如下:
如果要將列舉顯示為 stings 和 int 值,可以嘗試創建一個 EnumSchemaFilter 來更改架構。程式碼如下:
public class EnumSchemaFilter : ISchemaFilter { public void Apply(OpenApiSchema model, SchemaFilterContext context) { if (context.Type.IsEnum) { model.Enum.Clear(); Enum.GetNames(context.Type) .ToList() .ForEach(name => model.Enum.Add(new OpenApiString($"{Convert.ToInt64(Enum.Parse(context.Type, name))} = {name}"))); } } }配置 SwaggerGen 以使用上面的 ShemaFilter。
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "ToDo API", Description = "A simple example ASP.NET Core Web API", TermsOfService = new Uri("https://example.com/terms"), Contact = new OpenApiContact { Name = "Shayne Boyer", Email = string.Empty, Url = new Uri("https://twitter.com/spboyer"), }, License = new OpenApiLicense { Name = "Use under LICX", Url = new Uri("https://example.com/license"), } }); c.SchemaFilter<EnumSchemaFilter>(); });結果是這樣的:



