【问题标题】:Issues with large POST request大 POST 请求的问题
【发布时间】:2015-12-03 17:33:39
【问题描述】:

我在 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!");
                });
            });

方法的Header是:

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

任何帮助将不胜感激。 只要500

发布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

【问题讨论】:

  • 您的浏览器控制台有错误吗?
  • 问题现在出现错误
  • 您应该能够通过检查浏览器的 Ajax 请求来获得更好的信息。您应该准确地看到服务器返回给您的内容。
  • 使用 Visual Studio 断点! 500 错误意味着您的代码正在崩溃
  • 方法第一行有个断点;它在它面前破裂了。

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


【解决方案1】:

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

尝试创建一个类:

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

然后将控制器方法更新为如下所示:

[HttpPost]
public ActionResult SaveSketch(MyClass myClass)

【讨论】:

  • 这绝对是一个更好的方法;我会保持原样。但不幸的是,这并没有解决问题。
  • 我认为你不需要做数据:JSON.stringify({ id: $("#currLevelId").val(), jsonString: jsonString });您应该可以这样做: data: { id: $("#currLevelId").val(), jsonString: jsonString } 如果您仍然收到 500 错误,那么很可能序列化与控制器正在等待。如果您在该 Conrtoller 方法的第一行设置断点,它会被命中吗?
  • 不,但是我在 global.asax 中放置了一个 application_error 捕获,并且出现的错误是:“使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了 maxJsonLength 上设置的值财产。”所以由于某种原因,它不尊重我在 .config 文件中设置的值。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多