值类型为空时的 ASP Web Api ModelState 异常

Posted

技术标签:

【中文标题】值类型为空时的 ASP Web Api ModelState 异常【英文标题】:ASP Web Api ModelState exception when value type is null 【发布时间】:2016-03-06 02:01:03 【问题描述】:

我目前正在创建一个 ASP Web API,我发现如果对包含空值的 API 执行请求,我会在 ModelState 中收到“丑陋”的错误异常,我不想显示给我的用户。假设我的请求正文如下所示:

“Id”:“”,“名称”:“”,“描述”:“”,“创建”:“”,“UserId”:“”, “AmountOfUsers”:“”,“MinimumAmountOfUsers”:“”,“位置”:“”, “激活”:“”,“CategoryId”:“”,“日期”:“”

然后我将收到以下 Id 的 ModelState 异常:

Error converting value null to type 'System.Int32'. Path 'Id', line 1, position 9

所有其他值类型也是如此。

我的模型中的这些字段确实有一个 [Required] 数据注释(带有自定义错误消息),但这似乎不起作用。

我现在想知道解决此问题的最佳解决方案是什么。用户发布/放置的所有模型都是视图模型,所以我正在考虑使所有值类型都可以为空,然后在我将它们映射到数据库模型时将它们转换。我不确定是否有更好的解决方案,因此我很想听听您的意见。

【问题讨论】:

检查valid model state 并返回适当的响应。你什么时候得到那个例外?你的模型类是什么样的? 【参考方案1】:

可以通过修改web api config的IncludeErrorDetailPolicy来全局控制错误细节

https://msdn.microsoft.com/en-us/library/system.web.http.includeerrordetailpolicy(v=vs.118).aspx

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Never;

或者,您可以检查操作方法中的异常并控制发送回客户端的响应

也可以创建全局异常过滤器来控制细节

  public class MyExceptionHandler : IExceptionHandler 
    context.Result = new StatusCodeResult(HttpStatusCode.InternalServerError, context.Request);
   return Task.FromResult<object>(null);
  

然后在配置中注册该过滤器

config.Services.Replace(typeof(IexceptionHandler), new MyExceptionHandler());

【讨论】:

以上是关于值类型为空时的 ASP Web Api ModelState 异常的主要内容,如果未能解决你的问题,请参考以下文章

vue中当数据为空时的处理

最后一个值为空时的ByteBuffer翻转[重复]

mybatis查询结果为空时的返回值问题

解决用 VB 中用 ADO 访问 数据库时 SQL 查询处理 Null 值的问题( 使用 iff(isNull(字段), 为空时的值,不为空时的值) 来处理)

值不能为空。参数名称:尝试使用 web api 获取数据时的源

显示“这是啥?” UITableViewController 为空时的消息