我正在尝试上传文件并返回有关文件属性(名称,大小等)的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
我尝试了一些建议,但到目前为止还没回到原点!
答案 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响应。无需更改响应类型等。