我可以将字典作为操作参数传递,但不能将其传递到复杂对象中
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 以了解更多详细信息。
我想使用 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 以了解更多详细信息。