首先,请理解我不是试图在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类型没有区别。
如果它真的让你很困扰,那就看看这个和这个。