2012-12-18 21 views
31

Próbuję przesłać plik i zwrócić odpowiedź json dotyczącą właściwości (nazwa, rozmiar itp.) Pliku. Działa dobrze we wszystkich przeglądarkach z wyjątkiem IE.Pobieranie odpowiedzi Json w IE (7 ~ 10)

IE próbuje pobrać plik JSON jako plik!

Mam IE10 i testuję go na IE7 do 10, zmieniając tryb przeglądarki i tryb dokumentu z debuggera.

Używam asp.net mvc4, akcja przesyłania plików ma atrybut HttpPost i zwracam odpowiedź json za pomocą return Json (myObject);

A oto moje nagłówki HTTP

Żądanie

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 

Response

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 

Próbowałem kilka propozycji, ale do tej pory powrotem do punktu wyjścia!

+0

Więc ... o co chodzi? –

+0

mój zły ... IE próbuje pobrać json jako plik – smehnawal

+1

możliwy duplikat [monitów IE, aby otworzyć lub zapisać wynik json z serwera] (http://stackoverflow.com/questions/6114360/ie-prompts-to-open -lub-json-result-from-server) –

Odpowiedz

44

Trzeba będzie zwrócić json jako text/html ponieważ IE nie wie, co zrobić z zawartością application/json ..

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

Nie jestem pewien, ale to może działać (i byłoby bardziej poprawne jeśli tak) używać text/x-json

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

A ty po prostu uratowałeś mój dzień ... na długo przed tym, jak możemy zabić IE ... – smehnawal

+7

Prawidłowy/najbezpieczniejszy typ treści to w rzeczywistości "tekst/zwykły". Jeśli użyjesz text/html i zwrócisz HTML jako wartość jednej z właściwości JSON, IE8 i wcześniejsze zwykle robią dziwne rzeczy w treści odpowiedzi. –

+0

@RayNicholus, to ma sens ... –

3

choć kwestia ta jest o kilka miesięcy, myślałem Dodam jeszcze jedną sugestię, na wypadek gdyby ktoś inny używał ASP.NET MVC 3 or 4 i napotkał ten problem.

Z mojego doświadczenia wynika, że ​​kiedy IE próbuje pobrać odpowiedź Json jako plik, wszystko co musisz zrobić, aby rozwiązać problem, to dodać odniesienie do jquery.unobtrusive do widoku.

na przykład:

Po to jest na miejscu IE nie będzie już próby pobrania odpowiedzi json z akcji kontrolera JsonResult. Nie trzeba zmieniać typu odpowiedzi itp.

+0

Zawarłem ten plik na mojej stronie html, ale IE wciąż próbuje pobrać odpowiedź json. Jakaś pomoc? Mam webApi 2.0 – Simon

Powiązane problemy