We have an MVC (MVC4) application which at times might get a JSON events POSTed from a 3rd party to our specific URL ("http://server.com/events/"). The JSON event is in the body of the HTTP POST and the body is strictly JSON (Content-Type: application/json
- not a form-post with JSON in some string field).
How can I receive the JSON body inside the controller's body? I tried the following but didn't get anything
[Edit]: When I say didn't get anything I meant that jsonBody is always null regardless of whether I define it as Object
or string
.
[HttpPost]
// this maps to http://server.com/events/
// why is jsonBody always null ?!
public ActionResult Index(int? id, string jsonBody)
{
// Do stuff here
}
Note that I know if I give declare the method with a strongly typed input parameter, MVC does the whole parsing and filtering i.e.
// this tested to work, jsonBody has valid json data
// that I can deserialize using JSON.net
public ActionResult Index(int? id, ClassType847 jsonBody) { ... }
However, the JSON we get is very varied, so we don't want to define (and maintain) hundreds of different classes for each JSON variant.
I'm testing this by the following curl
command (with one variant of the JSON here)
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 }}}
See Question&Answers more detail:os