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!
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");
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.