How do I / is it possible to pass in a json object to a webapi controller (POST) and not have a class to map it to, but rather handle it as arbitrary content?
So if I pass in from my client like so:
createRecord: function (model, data, callback, callbackParams) { var request = jQuery.ajax({ type: "POST", // default = GET, url: '/api/' + model + '/', data: data, contentType: 'application/json', success: function (msg) { $('#results').text(msg); if (callback) // only fire a callback if it has been specified callback(msg, callbackParams); }, error: function (jqXHR, textStatus) { alert('Request failed: ' + textStatus); } }); }
and data is something like:
{ "_id" : ObjectId("5069f825cd4c1d590cddf206"), "firstName" : "John", "lastName" : "Smith", "city" : "Vancouver", "country" : "Canada" }
My controller will be able to parse it? And next time the data may not match that signature (eg:
{ "_id" : ObjectId("5069f825cd4c1d56677xz6"), "company" : "Acme" }
In my controller, I have tried:
public HttpResponseMessage Post([FromBody]JObject value)
and:
public HttpResponseMessage Post([FromBody]string value)
and (because this is actually to work with a mongo db):
public HttpResponseMessage Post([FromBody]BsonDocument value)
but it looks like the object mapper wants to map to something other than string...
To post JSON to a REST API endpoint using C#/. NET, you must send an HTTP POST request to the REST API server and provide JSON data in the body of the C#/. NET POST message. You also need to specify the data type in the body of the POST message using the Content-Type: application/json request header.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With