c# - 手动进行流利验证时如何获得相同的响应模式
问题描述
当我以正常形式使用 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."
]
}
解决方案
在发布问题后立即找到答案。感谢 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);
}
推荐阅读
- android - 我们如何使用数据绑定从字符串资源中获取 SpannedString 对象?
- java - Java 原生接口:对象传递
- bash - 多个 if 条件在 shell 脚本中引发错误
- assembly - 程序集 8086 - 将两个矩阵相乘
- c# - ANTLR4 语法集成复杂性,用于选择与删除
- java - 启动 HBASE,java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder
- python - 简单的 matplotlib.animation 图变得非常快并且比停止更慢
- javascript - 如何在前端捕获未定义的路由?
- r - 分组ggplot中的备用刻度标签以避免R中的重叠
- c# - 为什么搜索操作在 mvc 中不起作用?