昨天,有用户反馈公司的系统,一提交表单就变成了下载文件。匆匆忙忙地发现是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); }