5

首先,请理解我并不是要在 IE9 中查看 JSON。我一直在使用 Fiddler。我有一个名为 Fine Uploader 的第三方上传器,它在成功上传 Ajax 文件时需要 JSON 响应消息。

现在我知道 IE9 没有 MIME 来显示 JSON,但我不想显示 JSON。我只是在 ajax 上传一些文件并且 IE9 尝试打开我的 ajax 响应后返回一个 JSON 响应。

由于我打算将我的所有 Web API 响应格式化为 JSON,我是否必须为每个 api 调用添加自定义文本/html 响应内容类型以使我的应用程序与 IE9 兼容?非常荒谬的东西,我无法克服浪费在处理 IE 兼容性问题上的时间。

4

4 回答 4

7

尽管 Ray 的回答有效,但这会改变所有 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

问题是您响应的内容类型:它必须是“text/plain”,而不是“application/json”。

于 2013-01-04T01:58:23.093 回答
0

您希望人们使用 IE9 使用您的 API 吗?通常,使用浏览器的人无论如何都无法读取 JSON。我建议你使用 Fiddler2 之类的东西来测试你的 API。

IE9 提示您下载文件的原因是因为它没有 MIME 处理程序来显示它。浏览器设计为仅显示某些 mime 类型,如 text/html、text/xml、image/png、image/jpeg 等。您通常需要一个特殊的插件来显示自定义类型,如 application/pdf。JSON,其 application/json mime 类型也不例外。

如果它真的让你很烦恼,请阅读这个这个

于 2012-12-29T10:58:44.347 回答