首页 > 解决方案 > 手动进行流利验证时如何获得相同的响应模式

问题描述

当我以正常形式使用 fluentvalidation 时,我有一个响应,但是当我尝试手动使用它时,我有另一个响应,如何手动获得相同的响应?

正常反应

{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "00-dc7d6c683021ab4e8b3e2db42748e569-ec9d9967213d614c-00",
    "errors": {
        "LicensePlate": [
            "'License Plate' não pode ser nulo."
        ]
    }
}

手动的

public ActionResult<ResponseUpdateLeadVehicleDTO> ChangeLeadPlate1(int id, [CustomizeValidator(Skip = true)]RequestUpdateLeadVehicleDTO request)
{    
  if (!validation.IsValid)
  {
    validation.AddToModelState(ModelState, null);
    return BadRequest(ModelState);
  }
}

回复

{
    "LicensePlate": [
        "'License Plate' não pode ser nulo."
    ]
}

标签: c#fluentvalidation

解决方案


在发布问题后立即找到答案。感谢 Kevin Smith 在向模型状态添加错误并在 asp.net core 3.1 中返回错误请求

我们需要将ApiBehaviorOptions注入到我们的操作中,这些选项用于描述 api 应该如何行为。其中一个选项是工厂在模型状态无效时从 api 创建响应,这称为InvalidModelStateResponseFactory我们可以使用ControllerContext调用这个工厂,它会返回一个 IActionResult,我们可以在其中返回到操作。

public IActionResult ChangeLeadPlate1(int id,
  [CustomizeValidator(Skip = true)] RequestUpdateLeadVehicleDTO request,
  [FromServices] IOptions<ApiBehaviorOptions> apiBehaviorOptions)
{   
  if (!ModelState.IsValid)
    return apiBehaviorOptions.Value.InvalidModelStateResponseFactory(ControllerContext);
}

推荐阅读