Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

web-api POST body object always null

I'm still learning web API, so pardon me if my question sounds stupid.

I have this in my StudentController:

public HttpResponseMessage PostStudent([FromBody]Models.Student student) {     if (DBManager.createStudent(student) != null)         return Request.CreateResponse(HttpStatusCode.Created, student);     else         return Request.CreateResponse(HttpStatusCode.BadRequest, student); } 

In order to test if this is working, I'm using Google Chrome's extension "Postman" to construct the HTTP POST request to test it out.

This is my raw POST request:

POST /api/Student HTTP/1.1 Host: localhost:1118 Content-Type: application/json Cache-Control: no-cache  {"student": [{"name":"John Doe", "age":18, "country":"United States of America"}]} 

student is supposed to be an object, but when I debug the application, the API receives the student object but the content is always null.

like image 546
InnovativeDan Avatar asked Mar 30 '14 08:03

InnovativeDan


1 Answers

FromBody is a strange attribute in that the input POST values need to be in a specific format for the parameter to be non-null, when it is not a primitive type. (student here)

  1. Try your request with {"name":"John Doe", "age":18, "country":"United States of America"} as the json.
  2. Remove the [FromBody] attribute and try the solution. It should work for non-primitive types. (student)
  3. With the [FromBody] attribute, the other option is to send the values in =Value format, rather than key=value format. This would mean your key value of student should be an empty string...

There are also other options to write a custom model binder for the student class and attribute the parameter with your custom binder.

like image 189
Raja Nadar Avatar answered Sep 30 '22 22:09

Raja Nadar