Json ответ скачать в IE (7 ~ 10)
Я пытаюсь загрузить файл и вернуть ответ json относительно свойств (имя, размер и т.д.) файла. Он отлично работает во всех браузерах, кроме IE.
IE пытается загрузить JSON в качестве файла!
У меня есть IE10 и тестирование его на IE7 до 10 путем изменения режима браузера и режима документа из отладчика.
Я использую asp.net mvc4, действие загрузки файла имеет атрибут HttpPost, и я возвращаю ответ json с помощью return Json (myObject);
И вот мои заголовки 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
Я попробовал несколько предложений, но до сих пор вернулся к квадрату!
Ответы
Ответ 1
Вам нужно будет вернуть json как text/html
, поскольку IE не знает, что делать с содержимым application/json
.
return Json(myObject, "text/html");
Не уверен, но это может сработать (и было бы правильнее, если бы оно было) использовать text/x-json
return Json(myObject, "text/x-json");
Ответ 2
Несмотря на то, что этот вопрос составляет несколько месяцев, я подумал, что добавлю еще одно предложение, на всякий случай кто-то использует ASP.NET MVC 3 or 4
и сталкивается с этой проблемой.
По моему опыту, когда IE пытается загрузить ответ Json в виде файла, все, что вам нужно сделать, чтобы исправить проблему, - добавить ссылку на jquery.unobtrusive
к вашему представлению.
например:
@Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js")
Как только это произойдет, IE больше не будет пытаться загрузить ответ json из действия контроллера JsonResult. Не нужно изменять тип ответа и т.д.