32

我正在尝试上传文件并返回有关文件属性(名称、大小等)的 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

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

4

2 回答 2

46

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

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

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

return Json(myObject, "text/x-json");
于 2012-12-19T01:20:56.980 回答
3

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

根据我的经验,当 IE 尝试将 Json 响应下载为文件时,您要纠正问题所需要做的就是添加对jquery.unobtrusive视图的引用。

例如:

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

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

于 2013-04-30T19:48:31.490 回答