web-dev-qa-db-ja.com

IEでのJSON応答のダウンロード(7〜10)

ファイルをアップロードして、ファイルのプロパティ(名前、サイズなど)に関するJSON応答を返そうとしています。 IEを除くすべてのブラウザーで正常に動作します。

IEはJSONをファイルとしてダウンロードしようとします!

IE10があり、ブラウザーモードとドキュメントモードをデバッガーから変更して、IE7から10でテストしています。

私はasp.net mvc4を使用しています、ファイルアップロードアクションにはHttpPost属性があり、return Json(myObject);を使用してjson応答を返しています

そして、ここに私の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

私はいくつかの提案を試みましたが、今までのところ1つに戻りました!

31
smehnawal

IEはtext/htmlコンテンツをどうするかわからないため、jsonをapplication/jsonとして返す必要があります。

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

確かではありませんが、動作する可能性があります(そしてtext/x-jsonを使用すればより正確になります

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

この質問は数か月前のものですが、他の誰かがASP.NET MVC 3 or 4を使用していてこの問題に遭遇した場合に備えて、もう1つの提案を追加しようと思いました。

私の経験では、IEがJson応答をファイルとしてダウンロードしようとすると、問題を修正するために必要なことは、ビューにjquery.unobtrusiveへの参照を追加することだけです。

例えば:

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

これが適切に設定されると、IEはJsonResultコントローラーアクションからjson応答をダウンロードしようとしなくなります。応答タイプなどを変更する必要はありません。

3
Jack