Error sending json in POST to web API service

C#asp.net.NetJsonasp.net Web-Api

C# Problem Overview


I'm creating a web service using Web API. I implemented a simple class

public class ActivityResult
{
    public String code;
    public int indexValue;
    public int primaryCodeReference;
}

And then I have implemented inside my controller

[HttpPost]
public HttpResponseMessage Post(ActivityResult ar)
{
    return new HttpResponseMessage(HttpStatusCode.OK);
}

But when I call the API passing in POST the file json:

{"code":"XXX-542","indexValue":"3","primaryCodeReference":"7"}

I obtain the following error message:

{
    "Message": "The request entity's media type 'text/plain' is not supported for this resource.",
    "ExceptionMessage": "No MediaTypeFormatter is available to read an object of type 'ActivityResult' from content with media type 'text/plain'.",
    "ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",
    "StackTrace": "   in System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
}

What am I doing wrong?

C# Solutions


Solution 1 - C#

In the HTTP request you need to set Content-Type to: Content-Type: application/json

So if you're using fiddler client add Content-Type: application/json to the request header

Solution 2 - C#

  1. You have to must add header property Content-Type:application/json

  2. When you define any POST request method input parameter that should be annotated as [FromBody], e.g.:

     [HttpPost]
     public HttpResponseMessage Post([FromBody]ActivityResult ar)
     {
       return new HttpResponseMessage(HttpStatusCode.OK);
     }
    
  3. Any JSON input data must be raw data.

Solution 3 - C#

another tip...where to add "content-type: application/json"...to the textbox field on the Composer/Parsed tab. There are 3 lines already filled in there, so I added this Content-type as the 4th line. That made the Post work.

Solution 4 - C#

Please check if you are were passing method as POST instead as GET. if so you will get same error as a you posted above.

$http({               
 method: 'GET',

> The request entity's media type 'text/plain' is not supported for > this resource.

Solution 5 - C#

I had all my settings covered in the accepted answer. The problem I had was that I was trying to update the Entity Framework entity type "Task" like:

public IHttpActionResult Post(Task task)

What worked for me was to create my own entity "DTOTask" like:

public IHttpActionResult Post(DTOTask task)

Solution 6 - C#

It require to include Content-Type:application/json in web api request header section when not mention any content then by default it is Content-Type:text/plain passes to request.

Best way to test api on postman tool.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGVillani82View Question on Stackoverflow
Solution 1 - C#beaumondoView Answer on Stackoverflow
Solution 2 - C#Kiran SagvekarView Answer on Stackoverflow
Solution 3 - C#john santoraView Answer on Stackoverflow
Solution 4 - C#sudheer kondalaView Answer on Stackoverflow
Solution 5 - C#Michael WashingtonView Answer on Stackoverflow
Solution 6 - C#Kiran SagvekarView Answer on Stackoverflow