c# - 将POST中的json发送到Web API服务器时出错

我正在使用Web API创建一个Web服务。 我实现了一个简单的类

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

然后我在我的控制器内实现了

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

但是当我调用API传递POST文件时json:

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

我收到以下错误消息:

{
    "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)"
}

我究竟做错了什么?

GVillani82 asked 2019-09-10T20:17:01Z
6个解决方案
177 votes

在HTTP请求中,您需要将Content-Type设置为:Content-Type: application/json

因此,如果您正在使用fiddler客户端,请将Content-Type: application/json添加到请求标头中

beaumondo answered 2019-09-10T20:17:21Z
1 votes

另一个提示...将“content-type:application / json”...添加到Composer / Parsed选项卡上的文本框字段。 那里已经填充了3行,所以我将这个Content-type添加为第4行。 这使邮政工作。

john santora answered 2019-09-10T20:17:45Z
1 votes
  1. 您必须添加标题属性[HttpPost] public HttpResponseMessage Post([FromBody]ActivityResult ar) { return new HttpResponseMessage(HttpStatusCode.OK); }
  2. 当您定义任何应该注释为[HttpPost] public HttpResponseMessage Post([FromBody]ActivityResult ar) { return new HttpResponseMessage(HttpStatusCode.OK); } 的POST请求方法输入参数时,例如:

    [HttpPost]
    public HttpResponseMessage Post([FromBody]ActivityResult ar)
    {
      return new HttpResponseMessage(HttpStatusCode.OK);
    }
    
  3. 任何JSON输入数据都必须是原始数据。

Kiran Sagvekar answered 2019-09-10T20:18:29Z
0 votes

请检查您是否正在通过方法POST而不是GET。如果是这样,你将得到与上面发布的相同的错误。

$http({               
 method: 'GET',

不支持请求实体的媒体类型“text / plain”   这个资源。

sudheer kondala answered 2019-09-10T20:19:00Z
0 votes

我在接受的答案中涵盖了所有设置。我遇到的问题是我试图更新实体框架实体类型“任务”,如:

public IHttpActionResult Post(Task task)

对我有用的是创建我自己的实体“DTOTask”,如:

public IHttpActionResult Post(DTOTask task)
Michael Washington answered 2019-09-10T20:19:30Z
0 votes

它需要在web api请求标题部分中包含Content-Type:application/json,而不提及任何内容,那么默认情况下它是Content-Type:text/plain传递请求。

在postman工具上测试api的最佳方法。

Kiran Sagvekar answered 2019-09-10T20:20:02Z
translate from https://stackoverflow.com:/questions/22384354/error-sending-json-in-post-to-web-api-service