web-dev-qa-db-ja.com

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

しかし、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)"
}

何が間違っていますか?

86
GVillani82

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

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

177
beaumondo

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

1
john santora
  1. ヘッダープロパティContent-Type:application/jsonを追加する必要があります
  2. [FromBody]として注釈を付ける必要があるPOSTリクエストメソッド入力パラメーターを定義する場合、e.g。

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

1
Kiran Sagvekar

受け入れられた回答にすべての設定が含まれていました。私が抱えていた問題は、次のようなEntity Frameworkエンティティタイプ「タスク」を更新しようとしていたことです。

public IHttpActionResult Post(Task task)

私のために働いたのは、次のような独自のエンティティ「DTOTask」を作成することでした:

public IHttpActionResult Post(DTOTask task)
0

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

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

0
Kiran Sagvekar

メソッドをPOSTとしてではなくGETとして渡しているかどうかを確認してください。その場合、上記で投稿したエラーと同じエラーが発生します。

$http({               
 method: 'GET',

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

0
sudheer kondala