4

JSON 形式で結果を返すコントローラーが既に含まれている ASP.Net Web API プロジェクトがあります。ここで、XML のみを受信して​​返す新しいコントローラーを追加する必要があります。次のオプションを使用して、コントローラーをプッシュして XML シリアル化オブジェクトを返すことができることを知っています。

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true

しかし、そうすると、古いコントローラーも XML 形式でデータを返すと思いますよね? これは私が必要とするものではありません。では、どうすれば目標を達成し、一部のコントローラーからのみ XML シリアル化オブジェクトを返すことができるでしょうか? ありがとうございました。

アップデート

提案されたアプローチを試しましたが、うまくいきません。Fiddler を使用してテストしています。結果がまだ JSON であることに注意してください (最後のスクリーンショット) ここに追加情報があります:

コントローラ:

コントローラ

リクエストクラス:

リクエストクラス

応答クラス:

応答クラス

フィドラーでのリクエスト:

Fiddler でのリクエスト

Fiddler での応答:

Fiddler での応答

4

2 に答える 2

5

コンテンツのネゴシエーションやシリアル化は、コントローラーが気にする必要はありません。

既定の ASP.NET Web API は、XML と JSON の両方のコンテンツを返すことができます。クライアントは、Accept HTTP ヘッダーを設定して特定の形式を要求する場合があります。

次のように設定します。

Accept: application/json

JSONを取得したい場合

Accept: application/xml

XML を取得したい場合

編集: また、Web API はデフォルトで DataContractSerializer を使用し、コメントの質問に答えることにも注意してください。

[DataContract(Namespace = "schemas.datacontract.org/2004/07/Test.Models" )]
public class TheThing
{
    [DataMember]
    public string Name { get; set; }
    [DataMember(Name = "contentname")]
    public string ContentName { get; set; }
}
于 2013-03-11T20:33:40.360 に答える
0

Accept が機能しないいくつかの API に出くわしました。「Content-Type」ヘッダーを

Content-Type: application/xml

これにより、コントローラーは XML 応答で同じように応答します。

Webapi2 では、Accept ヘッダーにより、コントローラーが期待される application/xml 応答を返すようになったようです。これは、以前のバージョンの WebAPI に問題があった可能性があります。

于 2014-05-20T14:21:06.180 に答える