Ajax发布到Web服务器:大小限制错误

时间:2013-12-14 23:19:21

标签: ajax

我想发布base64字符串,但收到错误:System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializerserializer,Stringinput,Typetype,Int32depthLimit) 我的json有base64和一些关于图像的信息

的Ajax: (photo_data是数组保持图像信息)

$.ajax(
   {
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: serviceurl + "buy",
    data:"{'userInfo':'"+JSON.stringify(userInfo)
           +"','photos':'"+JSON.stringify(photo_data)+"','buyS':'asd'}",
    dataType: "json",
    success: function(msg)
         {

         },
    error: function()
       {

        }
        });

Web服务器:

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public String buy(String userInfo,String photos,String buyS)
    {

        return "False";
    }

修改 当我删除base64字符串时,它正在工作。 (我确信attr('src')返回base64)

var photo=new Object();
//photo.imgSource=$(element).attr('src');
photo.s=s;
photo.c=c;
photo.p=p;
photo_data.push(photo);

1 个答案:

答案 0 :(得分:4)

你应该做的是增加ASP.NET的“maxJsonLength”限制。默认值大约是100KB,要通过WebMethods和WebServices发送图像等大文件,你一定要增加这个限制。

在Web.Config文件中,您可以根据需要更改此默认限制。

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

那个是~1MB。如果需要通过Web服务发送更大的文件,可以设置更高的值。

检查一下,如果有效,请告诉我。

编辑:我最近发现这不是你应该做的唯一设置。您还应该在web.config文件中设置httpruntime节点的“maxRequestLength”属性,如:

<system.web>
    <httpRuntime targetFramework="4.5" maxRequestLength="10000" executionTimeout="10800" />
</system.web>

这里,maxRequestLength以KB为单位,因此10000表示~10MB(完全为9,77MB)。如果用户带宽较低且请求长度要求大于10MB,则可以将executionTimeout属性设置为更高的值。这是几秒钟,所以10800意味着3个小时。

我想你在这里得到了照片。

干杯!