支付宝
微信
扫描二维码打赏
更多详情(暂无)

.Net MVC JsonResult在IE下返回值变成下载文件问题

昨天,有用户反馈公司的系统,一提交表单就变成了下载文件。匆匆忙忙地发现是IE浏览器(360兼容模式,不就是IE内核吗),返回Json格式的字符串变成了下载JSON文件。(代码如下)

return Json(obj, "application/json", JsonRequestBehavior.AllowGet);

 发现问题之后,为了快速响应用户的问题,我们只能将此处的方法换成

  return Content(JsonConvert.SerializeObject(obj));  

因为昨天改地比较匆忙,也没有功夫思考这个问题。今天闲下来的时候,乘着喝杯水的功夫来各种百度。。。发现,IE8及其以下好像会默认把ContentType="application/json"的报文当成JSON文件并且下载。

然后,下面就是各种解决方案了。将application/json换成text/html(将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理),或者将

其换成text/plain(将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理)。

所以这边如果我们调用JsonResult方法的时候,最后将ContentType设置成text/plain(个人喜好偏向这个)。

下面是我测试的方法,共大家参考。

        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);
        }


  

posted @ 2019-11-11 17:32  华临天下  阅读(316)  评论(0编辑  收藏  举报