【发布时间】:2017-09-13 19:30:50
【问题描述】:
我已经在网上搜索了几个小时,并尝试了许多不同的解决方案,这些解决方案也在 StackOverflow 上进行了描述。我知道以前有人问过类似的问题,但没有一个答案或 cmets 对我有用。
问题:我有一个带有一些参数的 Post-method 的 .NET Web API。 其中一个参数是一个复杂的对象,应该从正文中读取(即 JSON)。但是,此对象始终为空。
这是我的代码:
// 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"}}
作为参考,这是事件类:
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 更改为不同的格式(仅值,"Event": {} 围绕实际对象,= 在 JSON 前面)。
- 仅使用 Event 参数进行测试(删除其他参数以及路由中的参数)
- 为 Event 添加一个默认 ctor。
- 删除 [FromBody] 标签。如果我这样做,事件对象不为空,但所有属性都是。可以通过 URI 填充属性,但这不是所需的行为。
根据我阅读的所有解决方案和文档,它应该按照我上面显示的方式工作。 我错过了什么?
【问题讨论】:
-
worksheetId 应该是一个 int 而不是一个可为空的 int 对吧?
-
我相信 Jsonserializer 会自动将其转换为 0,不是吗?
-
最有可能的是,确保您的事件绑定到正确的命名空间,您可以将其绑定到控制器中的不同类
-
不是这样,强尼,但谢谢!
-
这实际上是您对 int 的回答(不应传递 null 而是 0)和日期时间应不带括号/大括号的组合。
标签: c# json http-post asp.net-web-api2 frombodyattribute