asp.net mvC语言 Web API IE9 JSON数据“你想打开还是保存这个文件”



首先,请理解我不是试图在IE9中查看JSON。我一直在用小提琴手。我有一个名为Fine uploader的第三方上传器,它在成功上传Ajax文件时期望JSON响应消息。

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

因为我打算有我所有的Web API响应JSON格式,我必须添加自定义文本/html响应内容类型为每个API调用,使我的应用程序兼容IE9?非常荒谬的东西,我无法克服我浪费了多少时间来处理IE兼容性问题。

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

一个简单的方法来解决这个问题(特别是在MVC中),看看我对这个问题的回答。

简而言之,下面的代码完成了这个任务,如果适用的话,可以将其包装到一个基本控制器/助手方法中:

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

我希望这对其他人有帮助!

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

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

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

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

如果它真的让你很困扰,那就看看这个和这个。

相关内容

最新更新