【发布时间】:2016-08-04 13:29:03
【问题描述】:
我正在为我的模型使用 Fluent Validation,并尝试使用 Swagger 映射字段和验证。
我有以下型号:
public abstract class PersonModel
{
protected PersonModel()
{
DetailModel = new DetailModel();
}
public DetailModel Details { get; set; }
}
public class CustomerModel : PersonModel
{
public DateTime DateJoined { get; set; }
}
public class DetailModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我有以下使用 Fluent Validation 的验证集:
public class CustomerModelValidator : AbstractValidator<CustomerModel>
{
public CustomerModelValidator()
{
RuleFor(x => x.DetailModel.FirstName)
.NotEmpty().WithMessage("FirstName is required");
RuleFor(x => x.DateJoined)
.NotEmpty().WithMessage("DateJoined is required");
}
}
为了让 Swagger 理解 Fluent Validation,我参考了这个网站: http://blog.yeticode.co.uk/2015/10/add-fluentvalidation-rules-to-swagger.html
为了让 Swagger 理解新的验证,下面这行代码起到了神奇的作用:
schema.required.Add("DateJoined");
但是,Swagger 不理解子验证,例如 FirstName。如果在这种情况下我在字段 [Required] 顶部使用数据注释,Swagger 会正确识别它。
这个博客提供的解决方案的问题是变量 Schema 不包含导航到DetailModel 字段。它只包含DetailModel 的定义。
但由于FirstName 未在架构中列出,我无法将其添加到必填字段中。
有人做到了吗?
【问题讨论】:
标签: c# swagger fluentvalidation