gpt4 book ai didi

asp.net-mvc-4 - ServiceStack - MVC 操作中未触发验证

转载 作者:行者123 更新时间:2023-12-04 04:38:31 24 4
gpt4 key购买 nike

我有以下 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 时,如果我不输入 AccountNumber,验证似乎不起作用。 :
[POST("create")]
public ActionResult Create(WarrantyDto model)
{
if (!ModelState.IsValid) return View(model);

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

它似乎只是击中了 _warrantyService.Post(model);没有尝试首先验证,有什么想法吗?

最佳答案

我相信 ServiceStack 会在它的请求/响应管道中处理一些 FluentValidation RuleSet 处理。但是,在您的 MVC Controller 中,您必须处理传递您想要使用的规则集。您还应该查看规则集之外的规则是如何执行的,因为 ServiceStack 执行规则的方式和“标准”FluentValidation 执行规则的方式是不同的。

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

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

关于asp.net-mvc-4 - ServiceStack - MVC 操作中未触发验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19292055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com