abp 中的流畅验证

问题描述 投票:0回答:2

我对 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
 }
c# .net asp.net-core aspnetboilerplate abp
2个回答
0
投票

您必须使用

RuleFor(x => x.Name).NotNull()
等其他属性。它还取决于数据类型的默认值,例如
int
0
,因此在这种情况下您需要检查 0。


0
投票

使用 FluentValidation 的应用程序服务方法应标记为虚拟。这是因为 ABP 使用拦截器来验证 DTO,因此该方法需要可重写。

https://docs.abp.io/en/abp/latest/Validation

© www.soinside.com 2019 - 2024. All rights reserved.