我在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
答案 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