大POST请求的问题

时间:2015-12-03 17:33:40

标签: c# json ajax asp.net-mvc

我在AJAX请求中遇到一个只会出现在大型JSON对象中的错误。

我正在使用画布的JSON对象,画布上有图画(矩形,线条,freedraw等)。当用户完成并希望将其保存以供日后使用时,他们会将其保存并开展其他业务。当绘图非常大以至于POST无法击中控制器方法时,我遇到了问题。

我已经为我的web.config添加了多个配置设置,包括:

<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="86753090" />
    </webServices>
  </scripting>
</system.web.extensions>
<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="1073741824" />
  </requestFiltering>
</security>
<httpRuntime maxRequestLength="1048576"/>

所有这些都没有解决问题;请求的代码如下。

$('#submitSketch').click(function () {
                var jsonString = JSON.stringify(lc.getSnapshot());
                $.ajax({
                    type: "POST",
                    url: "@Url.Action("SaveSketch")",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify({ id: $("#currLevelId").val(), jsonString: jsonString })
                })
                .done(function (data) {
                    alert("Saved");
                })
                .fail(function (XMLHttpRequest, textStatus, error) {
                    alert("Unable to save!");
                });
            });

方法的标题是:

[HttpPost]
public ActionResult SaveSketch(int id, string jsonString)

任何帮助将不胜感激。 只需一个500

POST http://localhost:59394/Job/SaveSketch
500(内部服务器错误)发送@ jquery-1.9.1.js:8526
jQuery.extend.ajax @jquery-1.9.1.js:7978
(匿名函数)@ 70:147
jQuery.event.dispatch @jquery-1.9.1.js:3074
elemData.handle @jquery-1.9.1.js:2750

2 个答案:

答案 0 :(得分:0)

我相信你遇到了这个问题,因为你的参数不正确。您正在从浏览器发送一个对象,但您的Controller方法需要两个属性。

尝试创建一个类:

public class MyClass
{
  public int id {get;set;}
  public string jsonString {get;set;
}

然后将控制器方法更新为:

[HttpPost]
public ActionResult SaveSketch(MyClass myClass)

答案 1 :(得分:0)

所以看起来问题是该项目并不尊重我在配置文件中设置的maxJsonLength的值。

可在以下站点找到解决方法:
http://forums.asp.net/t/1751116.aspx?How+to+increase+maxJsonLength+for+JSON+POST+in+MVC3