我在 ASP.NET Web API(版本 5.1.2)中遇到反序列化失败的问题。我希望反序列化引发错误,但我找不到它的配置。
我的具体(简化)案例是这样的。客户端应用程序 (AngularJS) 向 ASP.NET Web API 后端发送 HTTP POST 请求。作为有效负载,有一堆字符串:
["ABC100", "ABC200", "ABC300"]
但是,服务器需要一个整数列表:
List<int> Ids { get; set; }
最终发生的是反序列化失败,Ids 列表将为空并且没有错误。
Ids: []
当然,不匹配也需要修复,但在我看来很明显,在这种情况下 POST 请求应该会失败。如何将其设置为默认值?
最佳答案
这个问题的一个解决方案似乎是在 Controller 方法开始时检查 ModelState.IsValid 属性:
[HttpPost]
[Route("Stuff/Ids/")]
public void PostStuff(List<int> Ids)
{
if(!ModelState.IsValid)
throw new Exception("ModelState is not valid.");
// Carry on...
}
在我的问题描述的情况下,ModelState.IsValid 确实是错误的。
可以通过从中创建一个 Action 过滤器来使检查成为全局的。例如,可以在本文中找到相关说明:Model Validation in ASP.NET Web API
关于c# - 类型不匹配时如何使 ASP.NET Web API 反序列化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33867172/