POSTでJSONをWeb APIサービスに送信中にエラーが発生しました


90

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);
}

しかし、POSTでファイルjsonを渡してAPIを呼び出すと:

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

何が悪いのですか?


9
ペイロードをクライアントから受け入れるには、「application / json」のヘッダーを追加する必要があります。
Adam Zuckerman、2014年

HTTPリクエストにヘッダーを正しく設定しました。ただし、問題はサーバー側にあるようです:dropbox.com/s/xlidnnybs8v6d0u/Cattura.JPG
GVillani82

4
Acceptヘッダーをに設定しているようですapplication/json。また、Content-Typeヘッダーをに設定する必要がありapplication/jsonます。
ブライアンロジャース

回答:


186

HTTPリクエストでは、Content-Typeを次のように設定する必要があります。 Content-Type: application/json

したがって、fiddlerクライアントを使用している場合はContent-Type: application/json、リクエストヘッダーに追加します


2
  1. ヘッダープロパティを追加する必要があります Content-Type:application/json
  2. あなたはとして注釈されなければならない任意のPOSTリクエストメソッドの入力パラメータを定義すると[FromBody]例えば

    [HttpPost]
    public HttpResponseMessage Post([FromBody]ActivityResult ar)
    {
      return new HttpResponseMessage(HttpStatusCode.OK);
    }
  3. JSON入力データはすべてデータである必要があります。


1

別のヒント...「content-type:application / json」を... Composer / Parsedタブのテキストボックスフィールドに追加する場所。すでに3行ありますので、このContent-typeを4行目に追加しました。それがPostを機能させました。


0

POST代わりに、メソッドを渡しているかどうかを確認してくださいGET。もしそうなら、あなたはあなたが上に投稿したのと同じエラーを受け取ります。

$http({               
 method: 'GET',

リクエストエンティティのメディアタイプ「text / plain」は、このリソースではサポートされていません。


1
問題は、具体的にはhttp POSTについてです。彼は、サーバーにデータを送信しているサーバーからデータを要求していません。
戦争

0

受け入れた回答ですべての設定をカバーしました。私が抱えていた問題は、Entity Frameworkエンティティタイプ "Task"を次のように更新しようとしたことです。

public IHttpActionResult Post(Task task)

私にとってうまくいったのは、次のような独自のエンティティ "DTOTask"を作成することでした。

public IHttpActionResult Post(DTOTask task)

0

Content-Type:application/jsonコンテンツに言及していない場合は、web apiリクエストヘッダーセクションに含める必要がありますContent-Type:text/plain。デフォルトでは、リクエストに渡されます。

postmanツールでAPIをテストする最良の方法。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.