昨天,有用戶反饋公司的系統,一提交表單就變成了下載文件。匆匆忙忙地發現是IE瀏覽器(360兼容模式,不就是IE內核嗎),返回Json格式的字符串變成了下載JSON文件。(代碼以下)html
return Json(obj, "application/json", JsonRequestBehavior.AllowGet);
發現問題以後,爲了快速響應用戶的問題,咱們只能將此處的方法換成json
return Content(JsonConvert.SerializeObject(obj));
由於昨天改地比較匆忙,也沒有功夫思考這個問題。今天閒下來的時候,乘着喝杯水的功夫來各類百度。。。發現,IE8及其如下好像會默認把ContentType="application/json"的報文當成JSON文件而且下載。瀏覽器
而後,下面就是各類解決方案了。將application/json換成text/html(將文件的content-type設置爲text/html的形式,瀏覽器在獲取到這種文件時會自動調用html的解析器對文件進行相應的處理),或者將app
其換成text/plain(將文件設置爲純文本的形式,瀏覽器在獲取到這種文件時並不會對其進行處理)。測試
因此這邊若是咱們調用JsonResult方法的時候,最後將ContentType設置成text/plain(我的喜愛偏向這個)。htm
下面是我測試的方法,共你們參考。blog
public ActionResult GetJsonByApplicationJson() { var obj = new {Name = "zhangsan", Sex = "nan", Age = "18"}; return Json(obj, "application/json", JsonRequestBehavior.AllowGet); }
public ActionResult GetJsonByTextPlain() { var obj = new {Name = "zhangsan", Sex = "nan", Age = "18"}; return Json(obj, "text/plain", JsonRequestBehavior.AllowGet); } public ActionResult GetJsonByTextHtml() { var obj = new { Name = "zhangsan", Sex = "nan", Age = "18" }; //var content=Content(JsonConvert.SerializeObject(obj)) return Json(obj, "text/html", JsonRequestBehavior.AllowGet); }