2012-12-18 14 views
31

Sto tentando di caricare un file e restituire una risposta JSON relativa alle proprietà (nome, dimensione, ecc.) Del file. Funziona bene in tutti i browser tranne IE.Download risposta Json in IE (7 ~ 10)

IE tenta di scaricare il JSON come file!

Ho IE10 e testarlo su IE7 a 10 cambiando la modalità browser e la modalità documento dal debugger.

Sto usando asp.net mvc4, l'azione di caricamento del file ha attributo HttpPost e sto restituendo la risposta di JSON usando return Json (myObject);

E qui sono i miei intestazioni HTTP

Richiesta

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 

risposta

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 

ho provato un paio di suggerimenti, ma così indietro al punto di partenza!

+0

Quindi ... qual è il problema? –

+0

my bad ... IE tenta di scaricare json come file – smehnawal

+1

possibile duplicato di [IE richiede di aprire o salvare i risultati JSON dal server] (http://stackoverflow.com/questions/6114360/ie-prompts-to-open -or-save-json-result-from-server) –

risposta

44

Sarà necessario restituire il JSON come text/html poiché IE non sa cosa fare con application/json contenuti ..

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

Non sono sicuro, ma potrebbe funzionare (e sarebbe più corretto se lo fa) da utilizzare text/x-json

return Json(myObject, "text/x-json"); 
+13

E lei ha appena salvato la mia giornata ... quanto tempo prima di poter uccidere IE ... – smehnawal

+7

Il tipo di contenuto corretto/più sicuro è in realtà "text/plain". Se usi text/html e restituisci HTML come valore di una delle tue proprietà JSON, IE8 e precedenti tendono a fare cose strane al contenuto della risposta. –

+0

@RayNicholus, questo ha senso ... –

3

Anche se questa domanda è di pochi mesi, ho pensato Aggiungerò un altro suggerimento, nel caso in cui qualcun altro stia usando ASP.NET MVC 3 or 4 e si imbattesse in questo problema.

Nella mia esperienza, quando IE tenta di scaricare la risposta JSON come file, tutto ciò che devi fare per correggere il problema è aggiungere un riferimento a jquery.unobtrusive alla tua vista.

ad esempio:

Una volta che questo è a posto IE non sarà più provare a scaricare la risposta JSON da un azione del controller JsonResult. Non è necessario modificare il tipo di risposta, ecc.

+0

Ho incluso questo file nella mia pagina html, ma IE cerca ancora di scaricare la risposta JSON. Qualsiasi aiuto? Ho webApi 2.0 – Simon