MVC maxJsonLength错误

时间:2018-05-18 09:07:13

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

我正在努力应对maxJsonLength错误。 我将非常长的xml字符串(~4MB)从控制器操作传递到视图中的javascript方法。此方法处理数据并使用AJAX将其发送回另一个控制器方法,这里我收到错误。

我在MaxJsonLength对象中设置JsonResult,在控制器方法中,将此字符串从控制器传递到视图没有问题。 但是当我在处理后尝试将其传回来时,我会收到错误。

这是我的Controller方法whitch准备数据:

private JsonResult PrepareXml(int someId)
{
     // preparing data...
     string xmlData = "..."; //(~4Mb)
     JsonResult res = Json(xmlData);
     res.MaxJsonLength = 10000000; // 10Mb
     return res;
}

这是我的Controller方法,它试图处理从ajax方法传递的数据:

private JsonResult GetProcesedXml(string resultXml)
{
     // This method is not ivoking
}

以下是我的脚本方法:

var data = {
        someId: rowId,
    };
$.ajax({
        type: "POST",
        url: "MyController/PrepareXml",
        data: data,
        contentType: "application/json; charset=utf-8",
        success: function (result) {
                // proces the result (big xml file)
                //...
                var processedResult = ""; // size of processedResult is a little bit bigger than 'result'
                var data2 = {
                    resultXml: processedResult
                };

                $.ajax({
                    type: "POST",
                    url: "MyController/GetProcesedXml",
                    data: data2,
                    contentType: "application/json; charset=utf-8",
                    success: function (r) {
                        alert('success');
                    },
                    error: function (data) {
                        alert(data.responseText);
                    }
                });
            }        
 });

我已经尝试过了:

<add key="aspnet:MaxJsonDeserializerMembers" value="2147483647" /> //(max value)
<requestLimits maxAllowedContentLength="2097151000" /> //(max value)
<httpRuntime maxRequestLength="10000" /> //(~10MB)

1 个答案:

答案 0 :(得分:0)

我找到了解决此问题的方法。 我已将Ajax方法中的内容类型更改为&#34; text / plain&#34;并在我的xml文件数据上使用了JSON.stringify。

$(".heroIcons .waxingButton").click(function(){
    $(".waxing").slideToggle(1500);
});

$(".heroIcons .facialsButton").click(function(){
    $(".facials").slideToggle(1500);
});

$(".heroIcons .bodywrapsButton").click(function(){
    $(".bodywraps").slideToggle(1500);
});

另一个变化是控制器。我从输入流中读取文件并将其解析为JSON类型:

var data2 = { resultXml: processedResult };

$.ajax({
    type: "POST",
    url: "MyController/GetProcesedXml",
    data: JSON.stringify(data2),
    contentType: "text/plain",
    success: function (r) {
                alert('success');
    },
});