值类型为空时的 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 异常的主要内容,如果未能解决你的问题,请参考以下文章
解决用 VB 中用 ADO 访问 数据库时 SQL 查询处理 Null 值的问题( 使用 iff(isNull(字段), 为空时的值,不为空时的值) 来处理)