14

現在、ASP.NET Web API に関するビデオ コースを見ています。コントローラーが呼び出されると、データはデフォルトで JSON で返されます。ビデオからこのサンプル プロジェクトをコピーすると、XML が取得されるためです。

欲求不満は大きいです、これを解決するのを手伝ってください。

私は ASP.NET Web API にかなり慣れていないので、ご容赦ください。

アップデート

コントローラーには特別なコードは含まれていません。これは、空の読み取り/書き込みアクションテンプレートを使用して API コントローラーから生成される単純なコードです。

4

3 に答える 3

10

ASP.NET WebAPI には組み込みのコンテンツ ネゴシエーションが付属しているため、戻り値の形式は要求自体によって、より具体的にはAccept/Content-Typeヘッダーによって決定されます (どのヘッダーが存在するかによって、Acceptヘッダーは よりも優先されるようContent-typeです)。

ブラウザで結果を表示していると思いますが、デフォルトではおそらくapplication/xml. ブラウザーでいくつかの設定/開発者ツールをいじりContent-Type: application/json、正しい応答を取得するために強制的に送信する必要があります (返されるHttpResponseMessageを想定しています)。

于 2012-10-16T15:24:52.123 に答える
8

Global.asaxに:次の行を追加します:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

このようになります。

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    BundleTable.Bundles.RegisterTemplateBundles();
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}
于 2012-10-16T15:19:30.780 に答える
5

James は近いですが、コンテンツ ネゴシエーションは実際には [Content-Type] ではなく [Accept] ヘッダーを使用します。

MVC の他のほぼすべてと同様に、コンテンツ ネゴシエーション コンポーネントをオーバーライドして、目的のコンテンツが確実に返されるようにすることができます。

W3cは明確に述べています-

14.1 受け入れる

Accept 要求ヘッダー フィールドを使用して、応答に受け入れられる特定のメディア タイプを指定できます。

-と-

14.17 コンテントタイプ

Content-Type エンティティ ヘッダー フィールドは、受信者に送信されるエンティティ ボディのメディア タイプを示します。HEAD メソッドの場合は、リクエストが GET の場合に送信されるメディア タイプを示します。

このページヘッダーは、リクエスト/レスポンスのネゴシエーションを理解するのに非常に役立ちます。

于 2012-11-27T23:26:19.597 に答える