【问题标题】:Send JSON with list to Controller将带有列表的 JSON 发送到控制器
【发布时间】:2020-09-30 18:26:17
【问题描述】:

我正在尝试将以下 JSON 发送到我的控制器:

 [
    {
    "collection": "col1",
    "uuid": [
          "11:22:33:44:55:66",
         "11:22:33:44:55:66"
        ]
    },
    {
        "collection": "test"
    }
 ]

每个对象“集合”都包含一个由 uuid 符号化的字符串列表。

我的模型如下所示:

public class DummyDeviceApiModel {

[Display(Name = "UUID")]
[StringLength(36)]
public List<string> uuid {get; set;}

[Display(Name = "Collection")]
public string collection {get; set;}


}

我的控制器功能如下:

public async Task<ActionResult<DummyDeviceModel>> PostCreateDummyDevice(List<DummyDeviceApiModel> ddpm)

当我只发送收集部分,但带有列表的 UUID 出现问题时,可行:

System.InvalidCastException:无法转换类型的对象 'System.Collections.Generic.List`1[System.String]' 输入 'System.String'

.

知道我做错了什么吗?问题似乎是模型中的“第二个”列表。

谢谢 斯蒂芬

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    [StringLength(36)]string 类型的验证属性,而不是 stringList&lt;string&gt;arrays。异常可能发生在幕后,因为它尝试在您的财产上使用validate,因为它的类型为List&lt;string&gt;。如果您想做我认为您应该做的事情,请在您的列表上创建一个自定义验证,以确保您的列表中只有长度小于或等于 36 的字符串,然后您需要实现 IValidatableObject on您的模型(类)或通过创建继承自 ValidationAttribute 的类来创建自定义 Validation Attribute 以进行验证。您可以在 MSDN:(https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-3.1) 阅读有关如何实现此接口和/或创建自定义属性的更多信息。作为测试是否确实是 StringLength 属性引发了异常,请在代码中注释掉特定的 Validation Attribute 并查看它是否运行时没有错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-22
      • 2014-10-31
      • 2015-06-25
      • 2019-06-13
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多