为什么我的复杂 [FromBody] 参数为空?

Why is my complex [FromBody] parameter null?

我无法绑定我的方法的 [FromBody] 参数。

示例 C#:

[Route("api/path")]
[HttpPost]
public void Post([FromBody] ComplexType param)
{
    // param is null
}
public class ComplexType
{
    public string name { get; set;}
}

我检查了 POST 正文内容和内容类型,看起来是正确的。

尽管彻底检查了发布的数据和内容类型是否符合预期,为什么它还是空的?

N.B。这是一个故意含糊的问题,因为我在诊断问题时遇到了很多麻烦,而且我找不到合适的问题和答案。 当我最终发现问题时,我为此自责,但我觉得有必要分享 我是如何发现问题的,希望能减轻其他人的痛苦。

碰巧,给出的示例可能没有任何问题。

在我的例子中,复杂类型的定义有问题,我有一个标记为 string 的参数,而它应该是 string[],所以 JSON 被解析了与型号不符。

重要的是我是如何发现这一点的:

在调试任何 API 方法时,有一个神奇的方法 ModelState 属性。 此 属性 为您提供有关将接收到的数据绑定到预期参数时发生的任何故障的信息。

例如:

在这里我们可以看到参数 (uploaded),以及该参数中未能正确绑定的 属性。

检查那个 属性 的定义,您可能会发现一个错误。