5

まず、IE9 で JSON を表示しようとしているわけではないことを理解してください。私は常にフィドラーを使用しています。Ajax ファイルのアップロードが成功したときに JSON 応答メッセージを期待する Fine Uploader というサード パーティのアップローダがあります。

IE9にはJSONを表示するためのMIMEがないことを理解しましたが、JSONを表示しようとはしていません。ajax がいくつかのファイルをアップロードし、IE9 が私の ajax 応答を開こうとした後、JSON 応答を返しています。

すべての Web API 応答を JSON でフォーマットするつもりなので、すべての API 呼び出しにカスタムの text/html 応答 content-type を追加して、アプリケーションを IE9 と互換性を持たせる必要がありますか? まったくばかげたことです。IE の互換性の問題に対処するためにどれだけの時間を浪費しているかを知ることができません。

4

4 に答える 4

7

レイの答えは機能しますが、これにより、すべての Json 応答の応答コンテンツ タイプが変更されます。理想的には、正常に動作するブラウザーの応答タイプに影響を与えないでください。

これを (特に MVC で) 解決する簡単な方法については、この質問に対する私の回答を参照してください。

要するに、次のコードはそのトリックを実行し、該当する場合はベース コントローラー / ヘルパー メソッドにラップできます。

if (!Request.AcceptTypes.Contains("application/json"))
    return base.Json(data, "text/plain");
else
    return base.Json(data);

それが他の誰かに役立つことを願っています!

于 2013-04-09T19:45:05.030 に答える
4

WebAPI では、Global.asax で起動される構成でグローバル応答を設定できます。このようにして、すべてのブラウザーが WebAPI 応答を真の JSON として扱います。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // stuff...

        config.Formatters.Add(new JsonMediaTypeFormatter());
        config.Formatters.JsonFormatter.SupportedMediaTypes
            .Add(new MediaTypeHeaderValue("application/json"));

        // Most important... +++++++++++++
        config.Formatters.JsonFormatter.SupportedMediaTypes
            .Add(new MediaTypeHeaderValue("text/html"));
        // -------------------------------

        config.EnsureInitialized();
    }
}
于 2014-12-05T19:21:07.090 に答える
1

問題は、応答の content-type です。「application/json」ではなく、「text/plain」でなければなりません。

于 2013-01-04T01:58:23.093 に答える
0

人々が IE9 を使用して API を使用することを期待していますか? 通常、ブラウザーを使用している人はとにかく JSON を読み取ることができません。Fiddler2 などを使用して API をテストすることをお勧めします。

IE9 がファイルのダウンロードを要求する理由は、表示する MIME ハンドラがないためです。ブラウザーは、text/html、text/xml、image/png、image/jpeg などの特定の MIME タイプのみを表示するように設計されています。通常、application/pdf などのカスタム タイプを表示するには、特別なプラグインが必要です。JSON の application/json MIME タイプも例外ではありません。

それが本当にあなたを悩ませているなら、これこれを読んでください。

于 2012-12-29T10:58:44.347 に答える