ファイルをアップロードして、ファイルのプロパティ(名前、サイズなど)に関する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つに戻りました!
IEはtext/html
コンテンツをどうするかわからないため、jsonをapplication/json
として返す必要があります。
return Json(myObject, "text/html");
確かではありませんが、動作する可能性があります(そしてtext/x-json
を使用すればより正確になります)
return Json(myObject, "text/x-json");
この質問は数か月前のものですが、他の誰かがASP.NET MVC 3 or 4
を使用していてこの問題に遭遇した場合に備えて、もう1つの提案を追加しようと思いました。
私の経験では、IEがJson応答をファイルとしてダウンロードしようとすると、問題を修正するために必要なことは、ビューにjquery.unobtrusive
への参照を追加することだけです。
例えば:
@Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js")
これが適切に設定されると、IEはJsonResultコントローラーアクションからjson応答をダウンロードしようとしなくなります。応答タイプなどを変更する必要はありません。