私はこのクラスを持っています:
_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、IEnumerable
1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable
1フォーマッタ、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が適切に設定されていない場合に発生することがわかりましたが、リクエストが処理されないため、私のケースではないようです。
何か案が ?
ありがとう
ヘッダーとしてではなく、本文でapplication/json
のコンテンツタイプを送信していました。したがって、POSTリクエストのデフォルトはtext/plainでした。RestClient拡張には、ヘッダーを入力するための別の場所があります。
何がネットワーク経由で送信されているかについて質問がある場合は、ブラウザーの開発者ツールの[ネットワーク]タブを確認するか、 Fiddler などのツールを使用してネットワークトラフィックを確認してください。
[〜#〜] postman [〜#〜] の中では、設定をapplication/jsonに変更するだけです。下の画像を参照してください。
おそらくあなたはあなたの[〜#〜] http [〜#〜]リクエストheaderに以下のコンテンツを追加する必要があります:
Content-Type: application/json
Postmanを使用してWeb APIをテストし、ヘッダーを持つように構成します。content-type:application/jsonこれはPOSTリクエストであるため、生のjsonデータを配置する必要があります。
Paramsに2つの異なるモデルがあるコントローラーがあると、この問題が発生しました。 Postメソッドはbuilder.EntitySetで指定されていないモデルを使用していました。これを解決する方法は、別個の読み取りコントローラーと書き込みコントローラーを作成することです。これはCQRSの線に沿っています。 API仕様はより複雑になりますが、Swaggerに感謝します。