c# - 使用 TryValidateModel 的问题
问题描述
大家早上好,我在我的模型上使用 TryValidateModel 以确保满足某些必填字段。根据文档,如果有效,则应返回 true,否则返回 false。
当我在我的 .net 核心 API 上使用它而不是使用无效模型返回 false 时,它似乎会导致异常并返回它自己的 JSON 以及停止任何进一步的代码执行。
有没有办法让它只返回 false 而不是抛出自己的错误,以便我可以返回自己的 JSON。
当我的验证失败时,我无法使用断点,并返回以下 JSON。
{
"errors": {"RepairOrder.ReferenceNumber": ["The ReferenceNumber field is required."]},
"type": null,
"title": "One or more validation errors occurred.",
"status": 400,
"detail": null,
"instance": null,
"extensions": {"traceId": "|514b9bb2-4999b11a49fa3351."}
}
编辑:如下要求的代码
using System.ComponentModel.DataAnnotations;
namespace Bright.Models
{
public class CreateRepairOrderRequest
{
public RepairOrder RepairOrder { get; set; }
}
public class RepairOrder
{
[Required]
public string ReferenceNumber { get; set; }
}
}
using Bright.Models;
using Microsoft.AspNetCore.Mvc;
namespace Bright.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class CreateRepairOrderController : ControllerBase
{
[HttpPost]
public CreateRepairOrderResponse Post(CreateRepairOrderRequest createRequest)
{
if(!TryValidateModel(createRequest))
return new CreateRepairOrderResponse() { AckMessage = "Creation Failed: Missing required field", RetCode = "1" }; //This line is never executed when TryValidateModel fails
}
}
解决方案
您可以使用ApiController类的Validate( ) 方法手动验证模型并设置ModelState。
using Bright.Models;
using Microsoft.AspNetCore.Mvc;
namespace Bright.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class CreateRepairOrderController : ControllerBase
{
[HttpPost]
public CreateRepairOrderResponse Post(CreateRepairOrderRequest createRequest)
{
this.Validate(createRequest);
if (!ModelState.IsValid)
{
//return BadRequest(ModelState);
return new CreateRepairOrderResponse() { AckMessage = "Creation Failed: Missing required field", RetCode = "1" };
}
}
}
推荐阅读
- odoo-10 - Odoo 报告:我如何对我的报告进行排序
- performance - OpenCL 如何分配工作项?
- c# - 如何在 Windows 中获取和设置系统音量
- git - 我对在 git checkout 中使用 -t 和不使用时感到困惑
- javascript - 将日期 1 和日期 2 与 10 分钟进行比较
- python-3.x - 将字符串格式的日期转换为纪元
- python - 在不同的循环python中迭代四个列表
- ruby-on-rails - 在运行时为omniauth-shopify-oauth2 gem 切换提供程序?
- prometheus - prometheus:rate() 在滑动窗口中工作吗?
- java - HikariCP - 负载测试使性能下降到停止