我正在使用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?
答案 0 :(得分:1)
Swaggers 仅支持 RequiredAttribute
、ObsoleteAttribute
和 MetaData
(用于外部类)。
所以除了写这样的东西之外,没有办法描述被接受的值:
/// <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()可能导致不同的字符串(带有/不带有下划线)