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

标签 c# enums swagger swagger-ui swashbuckle

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

这是我的示例请求:

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

     public string Id { get; set; }
 }

和示例枚举:

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

和 Controller :

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

我想让这个 EnumDataType 作为 Swagger 的信息来显示枚举描述,而不是字符串 destripction。我希望 Swagger 将此字符串视为枚举。

实际结果: click

预期结果: click

有没有可能以这种方式配置 Swashbuckle?

最佳答案

我猜我们在谈论 .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)的问题,您可以采取更多关于转换的 Controller (如有必要)

 [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() 可能会导致不同的字符串(带/不带)下划线

关于c# - Swashbuckle - 在 swagger 文档中将字符串视为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54287420/

相关文章:

c# - MVC 中的 P3P header 信息

java - 如何用泛型实现枚举?

c# - 我可以将枚举添加到现有的 .NET 结构中,例如日期吗?

documentation - Swagger 单交互 html

node.js - Nodejs Swagger 无法向请求添加授权 header

c# - 如何设置 SwashBuckle.AspNetCore.Swagger 以使用授权?

c# - 如何使用 C# 在 Selenium WebDriver 中按下 'Esc' 键

c# - Monotouch - 访问应用程序级别变量 (CS0120)

typescript 枚举值作为数组

c# - 错误 : Cannot obtain Metadata from http . .....?wsdl