WebAPI2中的Newtonsoft JSON DESERIALIZER在尝试将浮点解析到INT中时会默默失败



我正在使用asp.net webapi2的newtonsoft json.net库版本9,并将以下json发送到我的方法

{
    id:1,
    items:[{
        foo:1.23
    }]
}

在服务器上,项目集合具有类型的Bar[],其中bar为

public class Bar
{
    public int Foo { get; set; }
}

不幸的是,在尝试将1.23转换为int时,我的方法没有引起一个空数阵列,而不是尝试将1.23转换为CC_2的异常。

显然,这个问题与此问题相似,https://github.com/jamesnk/newtonsoft.json/issues/654,不应以高于6的版本出现,但是我们如前所述,在版本中提到,9(当前最新)。

我可以做出任何形式的配置以防止这种沉默行为吗?我处于企业环境中,希望有例外而不是数据丢失。

update

作为短期解决方案,我配置了异常处理,如下所示

GlobalConfiguration.Configuration.Formatters
      .JsonFormatter.SerializerSettings.Error += (o, e) =>
        {
            // this errors bubble through each parent, we only want to log once.
            if (e.CurrentObject == e.ErrorContext.OriginalObject)
            {
                _logger.Error(e.ErrorContext.Error.Message, e.ErrorContext.Error);
            }
            throw  e.ErrorContext.Error;
        };

目前,最重要的是,我得到的无效,而不是整个方法参数,这更好。正如下面DBC建议的那样,看起来错误确实被丢弃了,但是在请求绑定期间只是吞下了错误。使用新处理程序,它没有。继续研究。

看起来与WebAPI/MVC有关,因为它们不认为部分无效的模型理由无法停止执行。

如https://learn.microsoft.com/en-us/aspnet/web-api/web-api/overview/formats-and-model--绑定/模型 - 验证式载主 - web-api

public class ValidateModelAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (actionContext.ModelState.IsValid == false)
        {
            actionContext.Response = actionContext.Request.CreateErrorResponse(
                HttpStatusCode.BadRequest, actionContext.ModelState);
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新