【问题标题】:Json response download in IE(7~10)IE中Json响应下载(7~10)
【发布时间】:2012-12-06 06:39:07
【问题描述】:

我正在尝试上传文件并返回有关文件属性(名称、大小等)的 json 响应。它适用于除 IE 之外的所有浏览器。

IE 尝试将 JSON 作为文件下载!

我有 IE10,并通过从调试器更改浏览器模式和文档模式在 IE7 到 10 上对其进行测试。

我正在使用 asp.net mvc4,文件上传操作具有 HttpPost 属性,我正在使用 return Json(myObject);

返回 json 响应

这是我的 http 标头

请求

Key Value
Request POST /File/UploadFile/ HTTP/1.1
Accept  text/html, application/xhtml+xml, */*
Referer http://localhost:63903/
Accept-Language en-NZ
User-Agent  Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Content-Type    multipart/form-data; boundary=---------------------------7dc1e71330526
Accept-Encoding gzip, deflate
Host    localhost:63903
Content-Length  1377002
DNT 1
Connection  Keep-Alive
Cache-Control   no-cache

回应

Key Value
Response    HTTP/1.1 200 OK
Server  ASP.NET Development Server/11.0.0.0
Date    Tue, 18 Dec 2012 23:44:19 GMT
X-AspNet-Version    4.0.30319
X-AspNetMvc-Version 4.0
Cache-Control   private
Content-Type    application/json; charset=utf-8
Content-Length  154
Connection  Close

我尝试了一些建议,但到目前为止都回到了第一条!

【问题讨论】:

标签: json internet-explorer c#-4.0 asp.net-mvc-4 http-headers


【解决方案1】:

您需要将 json 返回为 text/html,因为 IE 不知道如何处理 application/json 内容..

return Json(myObject, "text/html");

不确定,但使用 text/x-json

可能会起作用(如果它会更正确
return Json(myObject, "text/x-json");

【讨论】:

  • 正确/最安全的内容类型实际上是“text/plain”。如果您使用 text/html 并将 HTML 作为您的 JSON 属性之一的值返回,IE8 和更早版本往往会对响应内容做一些奇怪的事情。
  • 当使用“text/html”作为Content Type并使用AjaxOptionsUpdateTargetId属性时,如果返回“text/html”的Content Type,它将把UpdateTargetId的内容替换为你返回的 Json。如果内容类型是“application/json”,它会按预期工作。有没有办法解决这个问题?
  • @RayNicholus 我尝试将内容类型更改为“text/plain”,而 ie8 仍然尝试下载它,设置为“text/html”就可以了。
  • 返回 'text/plain' 对我来说适用于所有浏览器。只是让 jquery 在另一端期望 json。
  • 能否请您也提供一个参考(如果可能,来自 Microsoft)对语句“IE 不知道如何处理 application/json 内容..”?谢谢!
【解决方案2】:

尽管这个问题是几个月前的问题,但我想我会再添加一个建议,以防万一其他人使用ASP.NET MVC 3 or 4 并遇到这个问题。

根据我的经验,当 IE 尝试将 Json 响应下载为文件时,您只需在视图中添加对 jquery.unobtrusive 的引用即可解决此问题。

例如:

@Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js")

一旦完成,IE 将不再尝试从 JsonResult 控制器操作下载 json 响应。无需更改响应类型等。

【讨论】:

  • 我已将此文件包含在我的 html 页面中,但 IE 仍会尝试下载 json 响应。有什么帮助吗?我有 webApi 2.0
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 2015-03-29
  • 2013-05-15
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多