将大型JavaScript对象传递到C#后端,而无需使用JSON/Strings(使用IE11)



这是我作为新雇用的初级开发人员的第一个堆栈溢出问题。我已经做了很多搜索,但似乎找不到答案,如果我错过了,很抱歉。

我有几个大型JavaScript对象,我希望从Web应用程序的前端传递到C#后端。在我正在处理的应用程序中,我们一直在使用JSON.stringify(object)来准备数据以传递到后端。当它击中后端时,我们做ApplyMyData data = JsonConvert.DeserializeObject<ApplyMyData>(json);-通常没有问题。

编辑:这是我们发布的方式:

$.ajax({
    type: 'POST',
    url: '/Controller/MyMethod',
    data: {
        json: JSON.stringify(myObject)
    },
    success: function (response) {
        if (response.success) {
            // yay
        } else if (response.success === false) {
            // nay
        } else {
            alert('Something unexpected happened');
        }
    }
});

'为什么不继续使用JSON?"我听到你问!

好吧,这很棘手。由于客户需求,我们必须支持IE11,这似乎对字符串的大小有限制。参考:查询字符串的最大可能长度是多少?

因此,所得的JSON.stringify(object)是不完整/无效的,当解析它时,会丢弃错误。当用户使用Chrome时,我们没有问题。

我已经做了一个快速的小提琴来证明这个问题,尝试在chrome和ie11中运行它,然后查看控制台日志,您会看到我得到的内容:https://jsfiddle.net/8yx7bqjs/。IE11以1024个字符的字符串长度截断...叹气...

所以我的问题:

  • 是否有另一种方法可以将JavaScript对象发送给'未修改' -Or- '未经修复的'的方式?
  • 必须以字符串的形式发送给后端的所有数据?
  • 是否有IE11的解决方法可以让您使用超过1024个字符的字符串?我似乎找不到任何。

预先感谢。

您可以在小提琴中提出模拟Ajax请求。我很快看的是我看的东西:

https://jsfiddle.net/8yx7bqjs/1/

$.ajax({    
    type: 'POST',
    url: '/echo/json',
    data: {
        "stuff": myArray
    }
}).done(function(res){
    console.log("success");
}).fail(function(res){
    console.log("test failed")
});

IE11实际上发送数据没有任何问题。

根据字符串ASP.NET的实际长度,默认情况下的限制为102400。

谢谢@robjam,这对我有很大帮助。我正在使用Raygun进行错误报告,并为我提供了帖子表格值。形式值在其控制台中被截断,因此我认为(可能是错误的),该字符串在浏览器中被截断了,然后才能将其放到后端。

,但看起来IE11的弦乐很好,也许Raygun根本没有在其错误记录控制台中打印出所有的JSON,这使我脱离了气味。

将进一步调查,谢谢。

最新更新