11

今週、2つのASP.NET Web APIアプリケーションを作成しました。どちらにも、1つの単純なコントローラーが含まれています。それぞれを調整して機能させたり、例外を含めたりしましたが、私が見る限り、それらはほぼ同じように構成されています。

これらの1つはJSONを返し、もう1つはXMLを返します。両方にJSONを返してもらいたいです!

私はこの振る舞いを制御するかもしれないいくつかの構成を探しましたが、私は喜びがありません。ASP.NET Web APIで使用されるシリアル化の種類を制御する設定はどこにありますか?

4

3 に答える 3

11

これは、呼び出し元のクライアント(ブラウザーや.NETクライアントなど)がAcceptヘッダーで渡すものによって定義されます。

受け入れる:application / json、application / xml、text / json、text / xml

JSONが優先されます(可能な場合)

したがって、XMLを返すクライアントは、Acceptヘッダーを上記または単に設定する必要があります

受け入れる:application / json

トリックを行う必要があります

于 2012-08-10T00:08:16.277 に答える
2

出力を1つのフォーマッタのみに制限するには、次の手順を試してください。

http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#removing_the_json_or_xml_formatter

関連する注記として、次のリンクでは、ASP.NET Web APIが送信されたHTTP要求に応じて、使用する出力形式を決定する方法、つまりXMLよりもJSONを選択する方法について説明しています。

http://www.asp.net/web-api/overview/formats-and-model-binding/content-negotiation

両方の形式を引き続きサポートしたいが、独自のクライアントコードが常にJSONを受信するようにする必要がある場合に便利です。

于 2012-08-10T00:09:44.193 に答える
0

2つのよく書かれた答え。この回答では、デフォルトの動作について説明します。

What will be the default behavior ? i.e if "Accept: */*"

公式ドキュメントから。(このドキュメントを完全に読んで、エンドツーエンドを理解してください)

それでも一致するものがない場合、コンテンツネゴシエーターは、タイプをシリアル化できる最初のフォーマッターを選択するだけです。

要約すると、以下は順序です。

  1. アプリケーションはAcceptヘッダーを探します。Acceptヘッダー値に特定のフォーマットが含まれている場合、そのフォーマッターが使用されます。

  2. ヘッダーに*/*が指定されている場合、リストの最初の項目が選択されます。Acceptconfig.Formatters

ボーナスポイント:編集していない場合config.Formatters、デフォルトはjson値になります。

于 2020-08-26T14:01:14.550 に答える