首页 > 解决方案 > 为什么我的复杂 [FromBody] 参数为空?

问题描述

[FromBody]我的方法的参数没有绑定时遇到问题。

示例 C#:

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

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

尽管通过检查发布的数据和内容类型都符合预期,为什么它仍然为空?

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

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

标签: asp.net-web-api2

解决方案


在我的情况下,复杂类型的定义存在问题,我将参数标记为string应该是string[]的,因此解析的 JSON 与模型不匹配。

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

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

例如: 在此处输入图像描述

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

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


推荐阅读