1

Nous développons une API web à l'aide de la validation web api 2. Tout fonctionne bien. Cependant, nous réalisons que les règles que nous définissons dans la validation courante ne sont pas respectées par le swagger (Swashbuckle).Documentation de Web API 2 avec Swagger et FluentValidation

Par exemple

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

Si je définir le nom comme champ requis dans le validateur fluide, la propriété est marqué comme facultatif dans l'api. Je sais que nous pouvons faire ce travail en utilisant l'attribut .net annotation. Mais nous ne voulons pas séparer la logique de validation (une partie de la logique ne sont pas faciles à faire dans l'annotation .net.

Tout commentaire sur ce sera apprécié.

Répondre

2

vous pouvez inclure vos Fluent règles de validation à la documentation Swagger en ajoutant une coutume SchemaFilter à votre configuration de Swagger.

Ajoutez le code ci-dessous à SwaggerConfig.cs

c.SchemaFilter<FluentValidationRules>(); 

Et hériter ISchemaFilter utilisant le code ci-dessous:

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); 
        } 
       } 
      } 
     } 
    }