c# - Asp.Net Core REST api:捕获模型序列化错误并返回显式消息
问题描述
这是我的问题,我正在开发一些开发人员使用的 Asp.Net 核心中的 REST api。解决方案设置为自动生成 swagger 文档,这使得 api 测试变得非常容易。一些 POST 方法正在通过请求正文接收巨大的 json 对象,并且一旦只有一个属性生成序列化错误(例如,将字符串放入整数字段),我的控制器中接收到的模型为空。然后,开发人员会浪费一些时间来找出导致序列化失败的字段。我不仅希望能够捕获这些错误,而且还希望向开发人员返回一条明确的消息,以指出导致错误的字段。我可以通过在Startup.cs
文件中执行此操作来捕获错误
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.Error = (sender, args) =>
{
};
});
此时我有序列化错误详细信息。我可以记录错误,但我想返回一个带有明确消息的 400。我尝试了一些像下面这样的乱七八糟的东西来访问 http 响应,但无法实现。
var provider = services.BuildServiceProvider();
var http = (IHttpContextAccessor)provider.GetService(typeof(IHttpContextAccessor));
var response = http.HttpContext.Response;
解决方案
要捕获模型错误,您可以尝试ModelState
,您可以尝试下面的代码以返回400
详细的错误消息。
[HttpPost("PostWithInValidate")]
public async Task<IActionResult> PostWithInValidate([FromBody]InValidateVM vM)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
return Ok(vM);
}
笔记
正如@Kirk Larin 的建议,如果您可以[ApiController]
在控制器上使用属性,则无需使用上述代码。
推荐阅读
- c++ - 返回数组中的剩余平均值
- javascript - 对于两个数组,查找仅存在于一个数组中的项目(对称差异)
- javascript - (JS)拼接替换数组中的值只替换第一个值
- html - 悬停时缩放图像 - 移动设备上的意外行为
- javascript - 如何在 JSON 中传递多个双引号?
- java - Java中的转置矩阵
- mysql - 存储 MD5 CHAR(32) 时选择什么 MySQL 排序规则?
- c# - .net core 控制台应用程序要求安装 .net Core
- python - 在不和谐机器人中编辑角色
- html - vb.net - 获取 webview 中显示的文本输入框的值并将其带回 winforms