JsonResult在某些时候被截断了

时间:2013-03-05 14:09:26

标签: c# asp.net-mvc asp.net-mvc-3 jquery

我正在使用MVC 3并且有一个操作返回一个带有187个名称值对的JsonResult(作为List<OrientationData>),但是通常从ajax调用接收的数据被截断并且无法解析。

这总是通过JsonResult返回相同的187项,所以如果它是长度问题,我认为它会失败。这是行动:

[HttpPost]
    public JsonResult GetAllMetrics()
    {
        var metrics = metric.GetAllMetrics();
        return Json(metrics);
    }

这是jQuery ajax调用:

$.ajax({
            url: urlGetAllMetrics,
            type: 'POST',
            data: jsonData,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (ajaxData) {
                if (ajaxData && ajaxData.length > 0) {
                    //populate data here
                }
            },
            error: function (msg) {
                alert(msg);
            }
        });

返回到ajax调用的结果有时会被切断,并且实际上会在两个不同的地方切断。这有什么可能的原因?

我还要注意,当我使用Fiddler捕获流量时,它会在不截断返回数据的情况下工作(我还不知道为什么)。当我不使用Fiddler时,我经常在ajax中收到错误,因为它无法将字符串解析为json。数据是具有“值”和“文本”字符串属性的数组。正在退回的文本被切断了:

...,{"Value":"h12","Text":"h12 name goes here"},{"Val

2 个答案:

答案 0 :(得分:1)

由于maxJsonLength属性的默认值(102400 - 100kb),它将被截断。尝试在web.config中更改它:

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

答案 1 :(得分:0)

我无法弄清楚这个问题的解决方案,所以......

我使用webHttpBinding添加了一个WCF服务,如WCF: maxStringContentLength always set to 8192的答案所示。我在服务类上设置了以下属性:

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

并确保将DataContract和DataMember属性添加到基础类:

[DataContract]
public class OrientationData
{
    [DataMember]
    public string Value { get; set; }
    [DataMember]
    public string Text { get; set; }
}

我还将方法(现在在界面上使用OperationContract)切换到:

public List<OrientationData> GetAllMetrics()
    {
        var metrics = metric.GetAllMetrics();
        return metrics;
    }

我希望我有更好的答案,但如果有其他人遇到这个问题,这是通过它的一种方法。当然,我打赌切换到MVC 4也可以通过this answerDavid Murdoch在另一篇文章中提到来修复它。