Swashbuckle-在swagger文档中将字符串视为枚举

时间:2019-01-21 09:58:38

标签: c# enums swagger swagger-ui swashbuckle

我正在使用FluentValidation,并且我只想接收来自流利验证器的自定义错误。这就是为什么我在请求类中的所有属性都是字符串的原因。但是,我也希望对枚举类型有更好的文档。

这是我的样品要求:

 public class AddNewPaymentRequest
 {
     [EnumDataType(typeof(PaymentStatus))]
     public string PaymentStatus { get; set; }

     public string Id { get; set; }
 }

和示例枚举:

 public enum PaymentStatus
 {
     Unknown,
     New,
     Pending,
     Completed
 }

和控制器:

[HttpPost]
public async Task<ActionResult> PostAsync([FromBody] AddNewPaymentRequest request)
{
   ...
}

我想将此EnumDataType用作Swagger的信息,以显示枚举描述,而不是字符串分解。我希望Swagger将此字符串视为枚举。

实际结果: click

预期结果: click

是否可以通过这种方式配置Swashbuckle?

2 个答案:

答案 0 :(得分:1)

Swaggers 仅支持 RequiredAttributeObsoleteAttributeMetaData(用于外部类)。 所以除了写这样的东西之外,没有办法描述被接受的值:

/// <summary> Allowed values are....

答案 1 :(得分:0)

我猜我们正在谈论.NET Core

如果可以的话,可以将其显式定义为枚举而不是字符串

 public class AddNewPaymentRequest
 {
     //[EnumDataType(typeof(PaymentStatus))]
     //public string PaymentStatus { get; set; }

     public PaymentStatus PaymentStatus { get; set; }

     public string Id { get; set; }
 }

然后您可以定义SwaggerGen如何对待枚举

 services.AddSwaggerGen(c => {c.DescribeAllEnumsAsStrings(); } );

如果在通过api接收/发送数据时遇到由Newtonsoft.Json进行序列化/反序列化的枚举的问题,则可以对转换进行更多控制(如有必要)

 [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
 public enum PaymentStatus
 {
     [EnumMember(Value = "Unknwon")]
     Unknown,

     [EnumMember(Value = "New")]
     New,

     [EnumMember(Value = "Pending")]
     Pending,

     [EnumMember(Value = "Completed")]
     Completed,

     [EnumMember(Value = "something_different_with_underline")]
     SomethingDifferentWithUnderline
 }

请注意,这些枚举的ToString()可能导致不同的字符串(带有/不带有下划线)