我正在使用 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/