Swashbuckle - обрабатывать строку как enum в документации по swagger - PullRequest
0 голосов
/ 21 января 2019

Я использую FluentValidation и хочу получать только мои собственные ошибки от беглых валидаторов.Вот почему все мои свойства в классах запросов являются строками.Тем не менее, я также хотел бы иметь лучшую документацию для перечислимых типов.

Вот мой пример запроса:

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

     public string Id { get; set; }
 }

И образец enum:

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

И контроллер:

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

Я бы хотелчтобы этот EnumDataType работал как информация для Swagger для отображения описания перечисления, вместо указания строки.Я хочу, чтобы Swagger рассматривал эту строку как перечисление.

Фактический результат: click

Ожидаемый результат: click

IsЕсть ли возможность настроить Swashbuckle таким образом?

1 Ответ

0 голосов
/ 22 мая 2019

Полагаю, мы говорим о .NET Core

Если для вас все будет в порядке, вы сможете определить его как enum вместо строки

 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(); } );

Если у вас возникли проблемы с сериализованными / десериализованными перечислениями (от Newtonsoft.Json) при получении / отправке данных на / от вашего API, вы можете взять больше контроллера для преобразования (при необходимости)

 [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 () для этих перечислений может приводить к различным строкам (с / без) подчеркивания

...