Web API IE9 JSON数据“是否要打开或保存此文件”

时间:2012-12-29 03:36:03

标签: asp.net-mvc asp.net-mvc-4

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

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

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

4 个答案:

答案 0 :(得分:7)

尽管Ray的回答有效,但这会改变所有Json响应的响应内容类型。理想情况下,我们不应该影响浏览器的响应类型。

要想轻松解决此问题(特别是在MVC中),请参阅my answer to this question

简而言之,以下代码可以解决这个问题,如果适用,可以将其包装到基本控制器/辅助方法中:

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

我希望能帮到别人!

答案 1 :(得分:3)

在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();
    }
}

答案 2 :(得分:1)

问题是你的回复的内容类型:它必须是“text / plain”,而不是“application / json”。

答案 3 :(得分:0)

您是否希望人们使用IE9来使用您的API?通常,拥有浏览器的人无论如何都无法读取JSON。我建议你使用像Fiddler2这样的东西来测试你的API。

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

如果它真的让你感到烦恼,请阅读thisthis