asp.net-core - Swagger Swashbuckle Asp.NET Core : show details about every enum is used

标签 asp.net-core asp.net-web-api swagger swashbuckle swashbuckle.aspnetcore

我有以下枚举:

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 生成以下内容:
enter image description here
和这个:
enter image description here
所以,我们只能看到默认值,而无法看到可用的枚举列表(名称和值)。
我想展示它。怎么做?

最佳答案

we can see only default value and no way to see available list of enum (names and values). I would like to show it. How to do it?


要在 swagger 中将枚举显示为字符串,请配置 JsonStringEnumConverter,在 ConfigureServices 中添加以下行:
        services.AddControllers().AddJsonOptions(options =>
            options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));
输出如下:
enter image description here
如果要将枚举显示为 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>();
        });
结果是这样的:
enter image description here

关于asp.net-core - Swagger Swashbuckle Asp.NET Core : show details about every enum is used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65312198/

相关文章:

c# - 在 Controller 中添加的声明在以下 ActionFilter 中找不到

c# - 触发 HttpClient 的更简单方法(可能没有任务)?

spring-boot - Swagger 声明 schema = @Schema(implementation = Map.class) 在 swagger-ui 中将 Schema 表示为 String

java - 如何编写在请求正文中接受 XML 的 swagger API

.net - Asp .net 核心 httpssys 异常 - 访问被拒绝

C# ASP.NET 代码覆盖率 - OpenCover 无结果

asp.net-core - 将 ASP.Net Core 2 Identity 与 Azure Ad 单租户身份验证结合使用

javascript - 如何使用 JavaScript 从 Bitfinex Web API 获取数据

unit-testing - 在 ASP.NET WebApi 中测试路由配置

laravel - 如何用 swagger 包装 Laravel 资源