首页 > 解决方案 > 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;

标签: c#asp.netasp.net-core-webapi

解决方案


要捕获模型错误,您可以尝试ModelState,您可以尝试下面的代码以返回400详细的错误消息。

        [HttpPost("PostWithInValidate")]
    public async Task<IActionResult> PostWithInValidate([FromBody]InValidateVM vM)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        return Ok(vM);
    }

笔记

正如@Kirk Larin 的建议,如果您可以[ApiController]在控制器上使用属性,则无需使用上述代码。


推荐阅读