我正在使用FluentValidation,我希望只从fluent验证器接收我的自定义错误。这就是为什么我在requests类中的所有属性都是字符串。然而,我还希望有更好的enum类型文档。
以下是我的示例请求:
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?
3条答案
按热度按时间t40tm48m1#
我想我们正在谈论.NET Core
如果你觉得可以的话,可以将其明确定义为枚举而不是字符串
字符串
然后您可以定义SwaggerGen如何处理枚举
型
如果你在API上接收/发送数据时遇到了序列化/非序列化枚举的问题(通过Newtonsoft.Json),你可以对转换采取更多的控制器(如果必要)
型
请注意,这些枚举的ToString()可能会导致不同的字符串(带/不带下划线)
jogvjijk2#
Swaggers只支持
RequiredAttribute
、ObsoleteAttribute
和MetaData
(外部类)。所以除了写这样的东西之外,没有办法描述接受的值:/// <summary> Allowed values are....
个oaxa6hgo3#
这些答案都有效地说:“你不能这样做,这里有其他的选择。”好吧,你可以这样做,这里是如何。
创建一个名为
OpenApiEnumAttribute
的属性如下:字符串
然后创建一个Schema Filter,如下所示:
型
最后,在Startup.cs中(或者在任何地方调用
AddSwaggerGen
:型
根据你的例子,你现在可以这样使用它:
型