我对 Application.Contracts 项目中的 ItemDto 类进行了流畅的验证,然后在 Application.Services 中我有接收 ItemDto 的 api 方法,然后我从 swagger 调用此方法,并且我希望在请求发送到服务器之前进行流畅的验证,就像我一样从 swagger 调用 api 方法,但未发送必填字段,然后 swagger 在将请求发送到服务器之前返回所需的验证消息,就像我使用数据注释时一样。
我使用的是abp框架
public class ItemDtoValidator:AbstractValidator<ItemDto>
{
public ItemDtoValidator()
{
RuleFor(x => x.Name).NotEmpty();
RuleFor(x => x.price).NotNull();
RuleFor(x => x.Quantity).NotNull();
}
}
,然后在 Application.Contracts 模块中添加 typeof(AbpFluentValidationModule) 和
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddScoped<IValidator<ItemDto>, ItemDtoValidator>();
}
并在我的服务中添加了Application.Services
public async Task<ItemResponseDto> AddItemAsync(ItemDto item)
{
// buisness code to add item
}
您必须使用
RuleFor(x => x.Name).NotNull()
等其他属性。它还取决于数据类型的默认值,例如 int
是 0
,因此在这种情况下您需要检查 0。
使用 FluentValidation 的应用程序服务方法应标记为虚拟。这是因为 ABP 使用拦截器来验证 DTO,因此该方法需要可重写。