web-dev-qa-db-fra.com

Téléchargement de la réponse Json dans IE (7 ~ 10)

J'essaie de télécharger un fichier et de retourner une réponse json concernant les propriétés (nom, taille, etc.) du fichier. Cela fonctionne très bien dans tous les navigateurs sauf IE.

IE essaie de télécharger le JSON en tant que fichier!

J'ai IE10 et je le teste sur IE7 à 10 en changeant le mode navigateur et le mode document depuis le débogueur.

J'utilise asp.net mvc4, l'action de téléchargement de fichier a l'attribut HttpPost et je renvoie une réponse json en utilisant return Json (myObject);

Et voici mes en-têtes http

Demande

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

Réponse

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

J'ai essayé quelques suggestions, mais si loin en arrière à la case départ!

32
smehnawal

Vous devrez renvoyer le json en tant que text/html puisque IE ne sait pas quoi faire avec application/json Contenu..

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

Pas sûr mais cela pourrait fonctionner (et ce serait plus correct si c'est le cas) pour utiliser text/x-json

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

Même si cette question remonte à quelques mois, j'ai pensé ajouter une autre suggestion, juste au cas où quelqu'un d'autre utiliserait ASP.NET MVC 3 or 4 et rencontre ce problème.

D'après mon expérience, lorsque IE tente de télécharger la réponse Json sous forme de fichier, tout ce que vous avez à faire pour corriger le problème est d'ajouter une référence à jquery.unobtrusive à votre vue.

par exemple:

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

Une fois que cela est en place IE n'essaiera plus de télécharger la réponse json à partir d'une action du contrôleur JsonResult. Plus besoin de changer le type de réponse etc.

3
Jack