2

私はいくつかの検証ルールを作成した次のDTOを持っています:

[Route("/warranties/{Id}", "GET, PUT, DELETE")]
[Route("/warranties", "POST")]
public class WarrantyDto : IReturn<WarrantyDto>
{
    public int Id { get; set; }
    public int StatusId { get; set; }
    public string AccountNumber { get; set; }
}

検証規則:

public class WarrantyDtoValidator : AbstractValidator<WarrantyDto>
{
    public WarrantyDtoValidator()
    {
        RuleSet(ApplyTo.Post, () => RuleFor(x => x.AccountNumber).NotEmpty());

        RuleSet(ApplyTo.Put, () =>
        {
            RuleFor(x => x.Id).NotEmpty();
            RuleFor(x => x.AccountNumber).NotEmpty();
        });

        RuleSet(ApplyTo.Delete, () => RuleFor(x => x.Id).NotEmpty());
    }
}

AppHost で検証をセットアップします。

Plugins.Add(new ValidationFeature());
container.RegisterValidators(typeof (WarrantyDtoValidator).Assembly);
FluentValidationModelValidatorProvider.Configure(provider =>
{
    provider.ValidatorFactory = new FunqValidatorFactory(container);
});

次に、WarrantyDto を POST するときに、次のように入力しないと検証が機能しないようですAccountNumber

[POST("create")]
public ActionResult Create(WarrantyDto model)
{
    if (!ModelState.IsValid) return View(model);

    _warrantyService.Post(model);
    return RedirectToAction("Index");
}

最初に検証しようとせずにヒットするように思え_warrantyService.Post(model);ますが、何かアイデアはありますか?

4

1 に答える 1