c# - 类型不匹配时如何使 ASP.NET Web API 反序列化失败

标签 c# json asp.net-web-api deserialization

我在 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/

相关文章:

javascript - 只有元组时如何从 JSON 将数据加载到 D3 图表

c# - 使用 JSON.NET 反序列化字典

c# - 具有相同路由前缀 ASP.NET Web Api 的多个 Controller 类型

c# - ADO.NET、SQL Server、C# : how to check if a certain parameter does not exist before performing an Insert in a database

c# - 通过字符串获取字段值

c# - 包含许多控件的页面上的 AutoEventWireup false (C#)

c# - Web API 托管

c# - BinaryFormatter.Deserialize HeaderHandler 捕获返回值

java - 在 json 的列表字段中显示数据和图像,就像延迟加载黑莓一样

c# - dotnet core 在RedIs中存储对象