I was not able to get the JSON array parameters in web api controller method (SaveDetails).
Here are my code.
JavaScript Code:
$.ajax( { url : "api/Test/SaveDetails", type : "POST", data : { "employees": [ { "firstName": "John", "lastName": "Doe" }, { "firstName": "Anna", "lastName": "Smith" }, { "firstName": "Peter", "lastName": "Jones" } ] }, success: function (data) {alert("success");}, error: function () {alert("Error");} })
Controller method
[HttpPost]
public DataSet SaveDetails(Models.Person[] obj)
{
//save opertion.
}
Model Method:
public class Person
{
public string firstName { get; set; }
public string lastName { get; set; }
}
What are the changes to be made to get the JSON array parameters in web api method.
Make sure that your WebAPI service is expecting a strongly typed object with a structure that matches the JSON that you are passing. And make sure that you stringify the JSON that you are POSTing.
JSON indicates values are an object using brackets { } . The following code is an example of a customer object in JSON: Notice no name is given to this object, but if you parsed it, you could still get the first and last name of your customer. Use a comma after the ending bracket and you can pass several objects in your JSON string.
First, to use Custom Action Methods in Web API, add a web api route as: $.ajax ( { type: 'POST', url: 'http://localhost:33649/api/TestApi/TestMethod', data: {'':'hello'}, contentType: 'application/x-www-form-urlencoded', dataType: 'json', success: function (data) { console.log (data) } });
You need to use JSON.stringify method to convert it to JSON string when you send it, And the model binder will bind the json data to your class object.
I ran across this thread when searching for an answer to my problem, trying to pass a list/array of object to a web api controller.
Details at this link: https://kwilson.io/blog/post-an-array-of-objects-to-webapi-using-jquery/
Change your data to be a single anonymous object instead of a raw array and it’ll work.
So in your case you might do the following for your data
data : {
"":
[
{ "firstName": "John", "lastName": "Doe" },
{ "firstName": "Anna", "lastName": "Smith" },
{ "firstName": "Peter", "lastName": "Jones" }
]
},
And in your Web API controller
[HttpPost]
public DataSet SaveDetails(List<Models.Person> obj)
{
//save operation.
}
This way you don't have to create another class to hold a list object like in Veera's answer.
Try the following code:
Declare the model method as follows:
public class Models.employees
{
public string firstName { get; set; }
public string lastName { get; set; }
}
public class Models.RootObject
{
public List<employees> employees { get; set; }
}
Controller:
[HttpPost]
public DataSet SaveDetails([FromBody]RootObject Person)
{
//save opertion.
}
Here comes the expected Result:
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