1

我们正在使用web api 2和流畅的验证来开发web api。一切工作正常。Swagger和FluentValidation的Web API 2文档

然而,我们意识到我们用流利的验证定义不招摇(Swashbuckle)得到尊重的规则。

例如

Class Customer { 
    public string Name {get;set;} 
} 

如果我定义名称作为流利验证所需字段,该属性被标记为在API为可选。我知道我们可以使用.net注释属性来完成这项工作。但我们并不想单独验证逻辑(一些逻辑是不容易在.net中的注释做。

对此有何评论将不胜感激。

回答

2

您可以通过添加自定义SchemaFilter你扬鞭配置包括你流利的验证规则扬鞭文档。

添加下面的代码在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); 
        } 
       } 
      } 
     } 
    }