我们正在使用web api 2开发web api并进行流畅的验证。一切都很好。
然而,我们意识到我们在流利验证中定义的规则并没有得到swagger(Swashbuckle)的尊重。
例如
Class Customer {
public string Name {get;set;}
}
如果我在fluent验证器中将名称定义为必填字段,则该属性在api中标记为可选。我知道我们可以通过使用.net注释属性来完成这项工作。但我们并不想分离验证逻辑(在.net注释中,一些逻辑并不容易。
对此的任何评论都将受到赞赏。
答案 0 :(得分:3)
您可以通过向Swagger配置添加自定义SchemaFilter
,将您的Fluent验证规则包含在Swagger文档中。
将以下代码添加到SwaggerConfig.cs
文件中:
c.SchemaFilter<FluentValidationRules>();
使用以下代码继承ISchemaFilter
:
public class FluentValidationRules : ISchemaFilter
{
public void Apply(Schema schema, SchemaRegistry schemaRegistry, Type type)
{
var validator = new Customer(); //Your fluent validator class
schema.required = new List<string>();
var validatorDescriptor = validator.CreateDescriptor();
foreach (var key in schema.properties.Keys)
{
foreach (var validatorType in validatorDescriptor.GetValidatorsForMember(key))
{
if (validatorType is NotEmptyValidator)
{
schema.required.Add(key);
}
}
}
}
}