IE中的Json响应下载(7~10)

时间:2012-12-18 23:52:49

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

我正在尝试上传文件并返回有关文件属性(名称,大小等)的json响应。它在除IE之外的所有浏览器中都能正常工作。

IE尝试将JSON下载为文件!

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

我正在使用asp.net mvc4,文件上传操作有HttpPost属性,我使用返回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

我尝试了一些建议,但到目前为止还没回到原点!

2 个答案:

答案 0 :(得分:44)

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

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

不确定但是它可能有用(如果它会更正确)使用text/x-json

return Json(myObject, "text/x-json");

答案 1 :(得分:3)

即使这个问题已经过了几个月,我还是会想再增加一个建议,以防万一其他人使用ASP.NET MVC 3 or 4并遇到这个问题。

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

例如:

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

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