Подтвердить что ты не робот

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

Я попробовал несколько предложений, но до сих пор вернулся к квадрату!

4b9b3361

Ответ 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. Не нужно изменять тип ответа и т.д.