C# WebAPI 2&;流畅的验证-利用规则集

C# WebAPI 2&;流畅的验证-利用规则集,c#,validation,asp.net-web-api2,autofac,fluentvalidation,C#,Validation,Asp.net Web Api2,Autofac,Fluentvalidation,我正在开发一个Web API应用程序,利用FluentValidation和AutoMapper和AutoFac。我有基本的设置,一切都正常。验证对我来说是透明的,在controller中,我只需检查其是否有效: [Route("")] [HttpPost] public HttpResponseMessage PostDinnerList(DinnerListDTO newDinnerList) { if (!ModelState.IsValid

我正在开发一个Web API应用程序,利用
FluentValidation
AutoMapper
AutoFac
。我有基本的设置,一切都正常。验证对我来说是透明的,在controller中,我只需检查其是否有效:

    [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);
    }
[路线(“”)]
[HttpPost]
公共HTTPResponseMessagePostDinnerlist(晚餐列表到新晚餐列表)
{
如果(!ModelState.IsValid)
{
返回请求.CreateErrorResponse(HttpStatusCode.BadRequest,ModelState);
}
var dinnerList=\u mapper.Map(newDinnerList);
dinnerList.Owner.Token=_userService.GetUserToken();
dinnerList=\u dinnerListRepository.InsertDinnerList(dinnerList);
var newDinnerListDto=\u mapper.Map(dinnerList);
返回Request.CreateResponse(newDinnerListDto);
}
当我传递DTO并将其保存到数据库中时,这是正常的。然而,我想利用相同的验证器和规则集来区分何时创建新条目和何时编辑不同的规则

我看到在MVC版本的
FluentValidation
中,
CustomizeValidatorAttribute
是可用的,可以使用它选择规则集。WebAPI版本中没有类似的内容

我在想我怎样才能解决这个问题。理想情况下,我希望有两个操作:new/update,使用相同的验证器,并指示应该使用哪个规则集

我想到的解决办法是:

  • 在编辑操作上使用与新操作不同的DTO,并创建单独的验证器-但我想创建不必要的/重复的/样板代码
  • 在控制器的操作中手动实例化验证器-基于条件,指示规则集并手动调用验证-但这伪造了整个IoC设置和抽象
请告知

  • 例如,如果您的实体具有自动生成的id(标识),则您可能可以依赖DTO的id来检查您的实体是新的(未设置id)还是即将更新(将设置id),并使用方法根据该id构建验证规则

  • 另一个选项是,DTO将具有一个状态,该状态描述要执行的操作,因此添加、更新、删除和更改,并使用方法围绕该状态构建验证规则


  • 希望这能有所帮助。

    我最近遇到了一个问题,我自然而然地想到了我认为更合适的选项1。当我实施它时,我会接受的。