web-dev-qa-db-ja.com

JSONをWeb API 2に投稿する際のエラー:リクエストエンティティのメディアタイプ「text / plain」は、このリソースではサポートされていません

私はこのクラスを持っています:

_public class MyClass
{
    public MyClass() { Secret = "Don't tell me"; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Description { get; set; }
    private string Secret { get; set; }
}
_

そして、このWEB APIメソッド:

_        // POST api/fixture
    public HttpResponseMessage Post(MyClass value)
    {
        return new HttpResponseMessage(HttpStatusCode.Created);
    }
_

XMLではなくJSONを返すようにWeb APIを設定しましたが、デフォルトの構成に他の変更を加えていません。私はFirefoxのRESTClient拡張機能でこのメソッドをテストしようとしています。これが私のリクエストです:

_POST localhost:XXXX/api/fixture
Content-Type: application/json
Accept: application/json
Content-Length: 60

{
 value : { "Name":"Cosby","Age":"13","Description":"OK" }
}
_

しかし、私はこのエラーを受け取っています:

{"Message": "リクエストエンティティのメディアタイプ 'text/plain'は、このリソースではサポートされていません。 /plain'.","ExceptionType":"System.Net.Http.UnsupportedMediaTypeException","StackTrace ":" at System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent content、Type type、IEnumerable1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable1フォーマッタ、IFormatterLogger formatterLogger、CancellationToken cancelToken)\ r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request、Type type、IEnumerable`1 formatters、IFormatterLogger formatterLogger、CancellationToken cancelToken) "}

編集:

メソッドが呼ばれていないようですのでわかりません。 デバッグすると、コンストラクターが呼び出され、その後、他のメソッドが呼び出されないことがわかります。例外は発生しません。

私はこの問題に長い間取り組んできました。この問題は通常、Content-Typeが適切に設定されていない場合に発生することがわかりましたが、リクエストが処理されないため、私のケースではないようです。

何か案が ?

ありがとう

14
tobiak777

ヘッダーとしてではなく、本文でapplication/jsonのコンテンツタイプを送信していました。したがって、POSTリクエストのデフォルトはtext/plainでした。RestClient拡張には、ヘッダーを入力するための別の場所があります。

何がネットワーク経由で送信されているかについて質問がある場合は、ブラウザーの開発者ツールの[ネットワーク]タブを確認するか、 Fiddler などのツールを使用してネットワークトラフィックを確認してください。

12
mason

[〜#〜] postman [〜#〜] の中では、設定をapplication/jsonに変更するだけです。下の画像を参照してください。

application/json

20
Azlan Jamal

おそらくあなたはあなたの[〜#〜] http [〜#〜]リクエストheaderに以下のコンテンツを追加する必要があります:

Content-Type: application/json
5
Baqer Naqvi

Postmanを使用してWeb APIをテストし、ヘッダーを持つように構成します。content-type:application/jsonこれはPOSTリクエストであるため、生のjsonデータを配置する必要があります。

4
Json

Paramsに2つの異なるモデルがあるコントローラーがあると、この問題が発生しました。 Postメソッドはbuilder.EntitySetで指定されていないモデルを使用していました。これを解決する方法は、別個の読み取りコントローラーと書き込みコントローラーを作成することです。これはCQRSの線に沿っています。 API仕様はより複雑になりますが、Swaggerに感謝します。

0
LastTribunal