我正在开发一个Web API应用程序,利用FluentValidation
和AutoMapper
以及AutoFac
。我有基本设置,一切都按预期工作。验证是透明地执行的,在控制器中我可以检查它是否有效:
[Route("")]
[HttpPost]
public HttpResponseMessage PostDinnerList(DinnerListDTO newDinnerList)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
var dinnerList = _mapper.Map<DinnerList>(newDinnerList);
dinnerList.Owner.Token = _userService.GetUserToken();
dinnerList = _dinnerListRepository.InsertDinnerList(dinnerList);
var newDinnerListDto = _mapper.Map<DinnerListDTO>(dinnerList);
return Request.CreateResponse(newDinnerListDto);
}
当我通过DTO并将其保存到数据库中时,这没关系。但是,我想利用与规则集相同的验证器来区分何时创建新条目以及何时将其编辑为不同的规则。
我看到在FluentValidation
的MVC版本中,CustomizeValidatorAttribute
可用,并且可以使用它选择规则集。在WebAPI版本中没有类似的东西。
我在想如何解决这个问题。理想情况下,我希望有两个操作:new / update,并使用相同的验证器,并指出应该使用哪个规则集。
我想到的解决方法:
请告知。
答案 0 :(得分:2)
如果您的实体具有自动生成的ID(标识),您可以依赖DTO的ID来检查您的实体是否是新的(没有ID设置)或者它即将更新(将设置id)并根据使用"When" or "Unless"方法的验证规则构建验证规则。
其他选项是您的DTO将具有描述您要执行的操作的状态,因此已添加,更新,已删除和未更改,并使用"When" or "Unless"方法围绕该操作构建验证规则。
希望这有帮助。