我们有一个 MVC (MVC4) 应用程序,它有时可能会从第 3 方获取一个 JSON 事件 POST 到我们的特定 URL(“ http://server.com/events/ ”)。JSON 事件在 HTTP POST 的正文中,并且正文是严格的 JSON(Content-Type: application/json
-不是在某些字符串字段中带有 JSON 的表单发布)。
如何在控制器主体内接收 JSON 主体?我尝试了以下但没有得到任何东西
[编辑]:当我说没有得到任何东西时,我的意思是 jsonBody 始终为空,无论我是否将其定义为Object
或string
。
[HttpPost]
// this maps to http://server.com/events/
// why is jsonBody always null ?!
public ActionResult Index(int? id, string jsonBody)
{
// Do stuff here
}
请注意,我知道如果我使用强类型输入参数声明方法,MVC 会执行整个解析和过滤,即
// this tested to work, jsonBody has valid json data
// that I can deserialize using JSON.net
public ActionResult Index(int? id, ClassType847 jsonBody) { ... }
但是,我们得到的 JSON 是多种多样的,所以我们不想为每个 JSON 变体定义(和维护)数百个不同的类。
我正在通过以下curl
命令对此进行测试(此处使用 JSON 的一种变体)
curl -i -H "Host: localhost" -H "Content-Type: application/json" -X POST http://localhost/events/ -d '{ "created": 1326853478, "data": { "object": { "num_of_errors": 123, "fail_count": 3 }}}