C# Web API POST 参数 FromBody 始终为 null

C# Web API POST parameter FromBody is always null

我已经在网上搜索了几个小时,并尝试了许多不同的解决方案,这些解决方案也在 Whosebug 上进行了描述。我知道以前有人问过类似的问题,但 none 的答案或评论对我有用。

问题:我有一个 .NET Web API,它有一个带有一些参数的 Post 方法。 其中一个参数是一个复杂的对象,应该从正文中读取(即 JSON)。但是,此 对象始终为 null

这是我的代码:

// POST api/worksheets/post_event/true/false
        [Route("post_event/{newWorksheet}/{eindEvent}")]
        [HttpPost]
        public Event Post(bool newWorksheet, bool eindEvent, [FromBody] Event eventData)
        {
            return eventData;
        }

明确一点:eventData 是始终为空的对象。布尔值被正确读取。

完整的请求正文是:

POST http://localhost:5000/api/worksheets/post_event/true/false
Content-Type: application/json
{"Persnr":1011875, "WorksheetId":null, "Projectnr":81445, "Uursoort":8678, "Tijd":{"09-08-2016 9:25"}}

作为参考,这是事件-class:

public class Event
    {
        public long Persnr { get; set; }
        public int WorksheetId { get; set; }
        public int Projectnr { get; set; }
        public int Uursoort { get; set; }
        public DateTime Tijd { get; set; }
    }

我已经尝试过的一些事情:

根据我阅读的所有解决方案和文档,它应该按照我上面显示的方式工作。 我错过了什么?

您的 json 对象无效。我的建议是始终通过 json 解析器手动编写 运行 json 对象,如下所示:http://json.parser.online.fr/

"Tijd":{"09-08-2016 9:25"}

应该是

"Tijd":["09-08-2016 9:25"]

这种类型的正确 JSON 应该是

{"Persnr":1011875, "WorksheetId":null, "Projectnr":81445, "Uursoort":8678, "Tijd":"09-08-2016 9:25"}

Tijd 没有大括号,因为 Tijd 是普通的 DateTime 属性,可以从字符串中推断出来,表示 DateTime

当您的对象无法从 JSON 请求反序列化时,通常会发生这种情况。

最佳做法是确保所有请求属性都可以接受 null(如果不能,则使值类型属性为 nullable). And then you can validate that all needed request properties are provided, or return 400 error。这样您至少可以了解是什么请求 属性 导致了问题。