how to post arbitrary json object to webapi
You can have your post method that takes in a HttpRequestMessage to by pass the model binding logic and you can read the content of the request directly:
public HttpResponseMessage Post(HttpRequestMessage req) { var data = req.Content.ReadAsStringAsync().Result; // using .Result here for simplicity... ... }
By the way, the reason why the action that takes in JObject doesn't work is because of 'ObjectId("...")' that is used as the value of "_id" in your data...
We passed json object by jquery, and parse it in dynamic object. it works fine. this is sample code:
ajaxPost:...Content-Type: application/json,data: { "name": "Jack", "age": "12" }...
webapi:
[HttpPost]public string DoJson2(dynamic data){ string name = data.name; int age = data.age; return name;}
similary question on stackoverflow: WebAPI Multiple Put/Post parameters
In your input, "_id": ObjectId("5069f825cd4c1d590cddf206")
is what is breaking the JSON materialization on the server. Removing ObjectId
and using "_id" : "5069f825cd4c1d590cddf206"
works with JObject
as well as Dictionary<string, object>