FluentValidation 未验证对象列表(在 SO 上尝试了其他解决方案)

FluentValidation not validating a list of objects (tried other solutions on SO)

我在 Whosebug 上尝试了多种解决方案,但是当我验证对象列表时没有触发验证。数据以以下形式出现,我使用 fluentvalidation 进行验证,例如:

public class Command : IRequest
{
    public List<objectsCreateDto> objects { get; set; }
}
public class CommandValidator : AbstractValidator<Command>
{
    public CommandValidator()
    {
        RuleForEach(x => x.objects).SetValidator(new objectsCreateDtoValidator());
    }
}

我的objectsCreateDtoValidator是:

public class objectsCreateDtoValidator : AbstractValidator<objectsCreateDto>
{
    public objectsCreateDtoValidator()
    {
        RuleFor(x => x.Name).NotEmpty();
        RuleFor(X => X.Identifier).NotEmpty();
        RuleFor(x => x.UuId).NotEmpty();
    }
}

这是我的 objectsCreateDto class:

    public class objectsCreateDto
    {
        public Guid UuId { get; set; }
        public string Name { get; set; }
        public string Identifier { get; set; }
    }

这是我发送到 API 端点的 JSON:

[
    {
        "uuId": "00000000-0000-0000-0000-000000000000",
        "name": "uuid test",
        "identifier": "testing order identifier"
    }
]

API 终点是:

[HttpPost]
    public async Task<ActionResult<Unit>> Create(List<objectsCreateDto> objectsCreateDtos)
    {
        return await Mediator.Send(new Create.Command{objects = objectsCreateDtos});
    }

两个验证都没有被触发。尝试了所有解决方案但没有奏效。如果我遗漏了什么,请善待。

PS:FluentValidation 在其他地方验证,而在这种情况下它不验证对象列表

您尝试验证的命令对象是否在其列表中包含任何 objectsCreateDto-items?如果没有,则什么都得不到验证。我试过你的代码,如果我向列表中添加一些对象,一切正常。

不知何故我做对了。

存在映射问题。在 API 端点的早期,它正在获取 list 并正在创建 Command 的实例。我把JSON改为Commandclass的方式,让它自动映射到class,之后Validation就开始工作了。

所以我更改了 API 端点:

[HttpPost]
public async Task<ActionResult<Unit>> Create(List<objectsCreateDto> objectsCreateDtos)
{
    return await Mediator.Send(new Create.Command{objects = objectsCreateDtos});
}

至:

public async Task<ActionResult<Unit>> Create(Create.Command command)
{
    return await Mediator.Send(command);
}

已将 JSON 更改为:

{
    "objects":  [
            {
                "uuId": "00000000-0000-0000-0000-000000000000",
                "identifier": "testing order identifier",
                "name": "something"
            },
            {
                "uuId": "00000000-0000-0000-0000-000000000000",
                "identifier": "testing order identifier",
                "name": "something"
            },
            {
                "uuId": "00000000-0000-0000-0000-000000000000",
                "identifier": "testing order identifier",
                "name": "something"
            }
        ]
}