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)"
}
何が間違っていますか?
HTTPリクエストでは、Content-Typeを次のように設定する必要があります:Content-Type: application/json
したがって、フィドラークライアントを使用している場合は、Content-Type: application/json
をリクエストヘッダーに追加します
別のヒント...「content-type:application/json」...をComposer/Parsedタブのテキストボックスフィールドに追加する場所。すでに3行が入力されているので、このContent-typeを4行目に追加しました。これがPostを機能させました。
Content-Type:application/json
を追加する必要があります[FromBody]
として注釈を付ける必要があるPOSTリクエストメソッド入力パラメーターを定義する場合、e.g。:
[HttpPost]
public HttpResponseMessage Post([FromBody]ActivityResult ar)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
JSON入力データはすべてraw dataである必要があります。
受け入れられた回答にすべての設定が含まれていました。私が抱えていた問題は、次のようなEntity Frameworkエンティティタイプ「タスク」を更新しようとしていたことです。
public IHttpActionResult Post(Task task)
私のために働いたのは、次のような独自のエンティティ「DTOTask」を作成することでした:
public IHttpActionResult Post(DTOTask task)
コンテンツに言及しない場合は、Web APIリクエストヘッダーセクションにContent-Type:application/json
を含める必要があり、デフォルトではContent-Type:text/plain
がリクエストに渡されます。
PostmanツールでAPIをテストする最良の方法。
メソッドをPOST
としてではなくGET
として渡しているかどうかを確認してください。その場合、上記で投稿したエラーと同じエラーが発生します。
$http({
method: 'GET',
このエンティティでは、リクエストエンティティのメディアタイプ「text/plain」はサポートされていません。