我可以将字典作为操作参数传递,但不能将其传递到复杂对象中

I can pass dictionary as action parameter but can't pass it inside complex object

我想使用 Postman 将 DTO 复杂对象内部的 IDictionary<string, List<string>> 传递到 ASP.NET 5 Api 操作中。

首先,我尝试通过单人 IDictionary<string, List<string>>,这是可行的。这是我的做法:

我使用这个请求正文:

{
    "Key1": [
        "Val1",
        "Val1"
    ],
    "Key2": [
        "Val1",
        "Val1"
    ]
}

当我像这样将它传递给动作时,它运行良好:

        [HttpPut("{id}")]
        public IActionResult EditTags(int id, [FromBody] IDictionary<string, List<string>> tags)
        {
            return Ok();
        }

有效:

问题是我需要像这样将这个字典包装在复杂对象中:

    public class DTO
    {
        public string SomeValue{ get; set; }

        IDictionary<string, List<string>> Tags{ get; set; }
     }

并将其作为操作的参数:

    [HttpPut("{id}")]
    public IActionResult EditTags(int id, [FromBody] DTO model)
    {
        //Do something with the model here
        return Ok();
    }

但是 model.tags 为空。

我使用这个请求正文:

{
    "SomeValue": "Value",
    "Tags": {
        "Key1": [
            "Val1",
            "Val1"
        ],
        "Key2": [
            "Val1",
            "Val1"
        ]
    }
}

但是 model.Tags 为空:

我会首先尝试将我的 Tags 属性 标记为 public:

public IDictionary<string, List<string>> Tags{ get; set; }

如果还是不行,我想你需要在这种情况下使用JsonExtensionData属性。也请查看 this 以了解更多详细信息。