我们正在使用web api 2和fluent validation开发web api。一切都很正常。
然而,我们意识到我们在fluent validation中定义的规则并没有得到swagger (Swashbuckle)的尊重。
例如
Class Customer {
public string Name {get;set;}
}
如果我在fluent验证器中将name定义为必填字段,则该属性在api中被标记为可选。我知道我们可以通过使用.net注解属性来实现这一点。但是我们不想分离验证逻辑(有些逻辑在.net注解中很难做到。
任何对此的评论都将不胜感激。
发布于 2017-04-01 15:21:45
您可以通过将自定义SchemaFilter
添加到Swagger配置中,将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);
}
}
}
}
}
发布于 2016-08-16 17:43:16
看看Github上的information from SwashBluckle,你似乎不能对它使用流畅的验证。
https://stackoverflow.com/questions/38966634
复制相似问题