我正在使用jQuery的自动完成功能.当我尝试检索超过17000条记录的列表(每条记录的长度不超过10条)时,它超出了长度并抛出错误:
异常信息:
异常类型:InvalidOperationException
异常消息:使用JSON JavaScriptSerializer进行序列化或反序列化时出错.字符串的长度超过maxJsonLength属性上设置的值.
我可以设置无限长度maxJsonLength的web.config?如果没有,我可以设置的最大长度是多少?
我在MVC中有一个大(ish)形式.
我需要能够生成包含该表单子集中的数据的excel文件.
棘手的一点是,这不应该影响表单的其余部分,所以我想通过AJAX来做.我在SO上遇到了几个似乎有关的问题,但我无法弄清楚答案的意思.
这个似乎最接近我所追求的:asp-net-mvc-downloads-excel - 但我不确定我理解这个反应,现在已经有几年了.我还看到了另一篇关于使用iframe处理文件下载的文章(找不到了),但我不知道如何使用MVC.
我的excel文件返回正常,如果我正在做一个完整的帖子回来但我不能让它在mvc中使用AJAX.
我得到一个例外,即JSON请求太大而无法反序列化.
它来自JsonValueProviderFactory ....
MVC App目前有一个使用Json.Net的自定义模型绑定器,对于反序列化json数据没有问题.但是我假设默认的JSON值提供程序正在绊倒?或者内置了一些奇怪的限制?
可能与最新版本的MVC4有关,因为使用之前的MVC4版本时,大量的JSON没有问题.
那么,有没有办法改变实际json值绑定器的设置?
我得到的印象是,它是一些自定义的东西,把它变成一个字典....我找不到任何与它相关的源代码或者我是否可以更改任何设置?
或者我可以使用另一种ValueBinder吗?
或任何其他选择?
Server Error in '/' Application.
The JSON request was too large to be deserialized.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: The JSON request was too large to be deserialized.
Source Error:
An unhandled exception was generated during the execution of …Run Code Online (Sandbox Code Playgroud) 介绍:
Web应用程序,ASP.NET MVC 3,一种控制器操作,它接受具有(可能)大字段的POCO模型类的实例.
型号类:
public class View
{
[Required]
[RegularExpression(...)]
public object name { get; set; }
public object details { get; set; }
public object content { get; set; } // the problem field
}
Run Code Online (Sandbox Code Playgroud)
控制器动作:
[ActionName(...)]
[Authorize(...)]
[HttpPost]
public ActionResult CreateView(View view)
{
if (!ModelState.IsValid) { return /*some ActionResult here*/;}
... //do other stuff, create object in db etc. return valid result
}
Run Code Online (Sandbox Code Playgroud)
问题:
一个动作应该能够接受大型JSON对象(在单个请求中至少高达100兆字节,这不是一个笑话).默认情况下,我遇到了几个限制httpRuntime maxRequestLength等等 - 除了MaxJsonLengh之外都解决了 - 这意味着JSON的默认ValueProviderFactory无法处理这些对象.
尝试:
设置
<system.web.extensions>
<scripting>
<webServices> …Run Code Online (Sandbox Code Playgroud) 我正在管理一个网站,该网站在过去几个月通过使用MVC 3.0 ASP.net构建的IIS 7.5运行良好.当我们的AJAX POST请求(通过jQuery触发)因发布的JSON被截断而失败时,我们偶尔会遇到问题.
到目前为止我们发现的是,对于所有这样的请求,请求的"Content-Length"标头包含的数据比我们实际获得的数据要多.
我们已经在web.config 中将maxRequestLength设置为51200,我相信maxAllowedContentLength的值有一个非常大的默认值(我们没有在我们的配置中设置它).此外,我有一个失败的请求,"内容长度"低至7301(字节),但我们设法只获得2179字节.所以我并不怀疑这会达到任何限制.
请求有问题请求的标头如下
有任何想法吗 ??
更新:我已经能够进一步将问题与我们的代码隔离开来.编写了一个独立的控制器,它接受一个JSON字符串并对其进行反序列化.如果出现错误,则会记录错误.
当我在50个请求的循环中与150个并发线程并行地触发此控制器时,我得到一些失败,其中该控制器接收的JSON被截断.现在我们非常关注优化IIS并阅读有关可能相关的各种参数的更多信息(目前我们在IIS上使用默认参数运行).
我强烈认为150个并发连接不应该是一个大问题,我真诚地希望调整一些参数,我们应该能够解决这个问题.一旦我们解决了这个问题,我将分享我的发现.
*更新2(10月8日)*:我进一步缩小了问题的范围.我打开了IIS中的错误日志,发现我的失败请求在读取数据时出现以下错误
BytesReceived = 0
ErrorCode = 2147943395
Error Description = "The I/O operation has been aborted because of either a thread exit or an application request.(0x800703e3)"
Run Code Online (Sandbox Code Playgroud)
我在iis论坛上找到有关此错误的信息,但我还没有尝试给出(mutliple)建议.以下链接可以作为搜索更多内容的良好起点
我试图将我的flexgrid数据传递到我的控制器,但只是弹出一个错误去控制器:
JSON请求太大而无法反序列化
控制器:
public ActionResult Testing(IList<Models.Schedule.plan> pParameter)
{
//Codes...
return Json("successfully saved!", JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
JS
_app.factory('_var ', ['$http', function ($http) {
var _var = {};
_var.checkList = function (pModelList) {
return $http.post('Schedule/Testing', { //Error occur here
pParameter: pModelList
});
}
return _var;
}]);
_app.controller('testingController', function ($scope, _var, $http) {
$scope.checkList = function () {
console.log($scope.GivingList["_src"]);
_var.checkList($scope.GivingList["_src"])
//Some Other Codes
}
});
Run Code Online (Sandbox Code Playgroud)
或者你有其他建议吗?先感谢您