使用Swagger和FluentValidation的Web API 2文档

3
我们正在使用Web API 2和Fluent Validation开发Web API。一切都运行正常。
然而,我们发现Swagger(Swashbuckle)没有遵守我们在Fluent Validation中定义的规则。
例如:
Class Customer {
    public string Name {get;set;}
}

如果我在流畅验证器中将名称定义为必填字段,则该属性在api中标记为可选。我知道我们可以通过使用.net注释属性来使其工作。但是我们不想分离验证逻辑(有些逻辑不容易在.net注释中实现)。
对此的任何评论将不胜感激。

1
ASP.NET Core 中的类似问题:https://dev59.com/PFcP5IYBdhLWcg3wRoEI - Michael Freidgeim
2个回答

4

通过向Swagger配置添加自定义SchemaFilter,您可以将Fluent Validation规则包含在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);
                }
            }
        }
    }
}

关于自定义验证器怎么办?我有一个自定义验证器,想将其作为CustomValidator<T>放入循环中。这个customValidator的类型是什么?请考虑编写一个SchemaFilter,用于所有流畅验证类。 - cimey

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接