try catch不适用于“返回Json()”异常

时间:2016-12-05 13:23:08

标签: c# asp.net-mvc

当json结果中的字符长度很大时,将引发以下异常:

  

使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过maxJsonLength属性上设置的值。

上面的异常是一个服务器端异常,有500个响应代码,因此如果我们将源代码放在try catch块中,那么错误应该在catch块中捕获,但try catch对这种情况不起作用。

您可以通过以下代码测试此问题,请在asp.net mvc控制器中使用它:

public JsonResult Test()
    {
        try
        {
            var result = "";
            var v1 = new JavaScriptSerializer();

            for (int i = 0; i < (v1.MaxJsonLength / 100) + 10; i++)
            {
                result += "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
            }

            //exception message:
            //Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        catch
        {
            //when exception is raised the catch will not be called

            return null;
        }


    }

2 个答案:

答案 0 :(得分:4)

我无法重现错误,但无论如何,发生的事情是Json方法实现已在内部捕获异常并将其转换为完整的HTTP 5xx响应。 return Json()来电没有例外。

你没有机会抓住这个例外,因为......你会怎么做?生成HTTP 5xx响应?这已经由MVC框架为您完成了。

答案 1 :(得分:-2)

试试这样:

ActionResult result;
try
        {
            var result = "";
            var v1 = new JavaScriptSerializer();

            for (int i = 0; i < (v1.MaxJsonLength / 100) + 10; i++)
            {
                result += "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
            }

            //exception message:
            //Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
            result= Json(result, JsonRequestBehavior.AllowGet);
        }
        catch
        {
            //when exception is raised the catch will not be called
        }
return result;