字符串的长度超过maxJsonLength属性(WebMethod)上设置的值

时间:2015-03-26 06:46:40

标签: asp.net json webforms webmethod

背景

我在ASPX页面的代码隐藏中有一个WebMethod

[WebMethod]
public static string GetServiceDetail()
{
    //...
}

我使用jQuery向它发送AJAX请求:

$.ajax({
    type: "POST",
    url: url + "GetServiceDetail",
    data: JSON.stringify({}),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
})

这通常可以正常使用。

问题

WebMethod返回大约88KB的数据时,框架会向HTTP请求返回500 Internal Server Error。 HTTP响应主体包含一堆JSON格式的.NET异常信息。反序列化时,响应具有以下信息:

  

System.InvalidOperationException

     

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

   at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, StringBuilder output, SerializationFormat serializationFormat)
   at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, SerializationFormat serializationFormat)
   at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)
   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)

疑难解答

  • 我根本没有在WebMethod中使用JavaScriptSerializer。正如堆栈跟踪所示,异常发生在我的代码之外。
  • 现有的StackOverflow问题似乎与显式JSON序列化或不同技术有关。它们意味着更改Web.config值并不起作用。

1 个答案:

答案 0 :(得分:2)

我通过在Web.config中更改名为maxJsonlength的属性来解决此问题:

<configuration>
  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="4000000"/>
      </webServices>
    </scripting>
  </system.web.extensions>
</configuration>

来自https://stackoverflow.com/a/1151993/238753