简体   繁体   English

字符串的长度超过了 mvc 中 maxjsonlength 属性上设置的值

[英]the length of the string exceeds the value set on the maxjsonlength property in mvc

I am using ajax call to get vehicle trip details .我正在使用 ajax 调用获取车辆行程详细信息。 So while returning trip details from controller to view I am getting the error "the length of the string exceeds the value set on the maxjsonlength property".因此,在从控制器返回行程详细信息以查看时,我收到错误“字符串的长度超过了 maxjsonlength 属性上设置的值”。

below given is the ajax call i am using to get trip details.下面给出的是我用来获取旅行详细信息的ajax调用。 Whenever the trip details are huge its going to the error function .每当旅行细节很大时,它就会进入误差函数。

 function LoadTripModalWindow(masterID, headwayPlanID, version, specialDay, applicableDay) { //change this value after cpp service implementation //version = 1; ///////////////// if (headwayPlanID == 0 || headwayPlanID == null) { $('#HeadwayPopUp').hide(); $('#NoTripGenerated').hide(); $('#NoHeadwayPopUp').show(); } else { $('#tripDialogDiv').hide(); $('#NoHeadwayPopUp').hide(); $.blockUI({ message: $('#msthrobber') }); var tripIn = ''; tripIn = '<table class="table table-bordered trip" id="tripInTableMS"> </table>'; $("#tripInTableMS").remove(); $("#TripIn").append(tripIn); var tripOut = ''; tripOut = '<table class="table table-bordered trip" id="tripOutTableMS"> </table>'; $("#tripOutTableMS").remove(); $("#TripOut").append(tripOut); $.ajax({ type: "GET", url: "/ScheduleManagement/MasterConfiguration/GetTripTableDetails/", data: { version: version, masterScheduleID: masterID, headwayPlanId: headwayPlanID, applicableDay: applicableDay, specialDay: specialDay }, dataType: "json", context: this, success: function (data) { var returnedData = JSON.parse(data); var tripIn = returnedData.TripIn; var tripOut = returnedData.TripOut; var TripInHeadwayPlan = returnedData.TripInHeadwayPlan; var TripOutHeadwayPlan = returnedData.TripOutHeadwayPlan; var TripInRoute = returnedData.TripInRoute; var TripOutRoute = returnedData.TripOutRoute; var ShiftDetails = returnedData.AssignedShifts; if ((tripIn == null || tripIn.length == 0) && (tripOut == null || tripOut.length == 0)) { //if (tripIn == null && tripOut == null) { $.unblockUI(); $('#tripDialogDiv').show(); $('#HeadwayPopUp').hide(); $('#NoTripGenerated').show(); } else { var shiftDetail = '<label"> Shift Details :</label>&nbsp;&nbsp;&nbsp;'; for (var s = 0; s < ShiftDetails.length; s++) { shiftDetail += '&nbsp;<input type="text" class="shift-details Shift' + (parseInt(s) + 1) + ' " disabled>' + '<label style="color: slategrey;">' + ShiftDetails[s].shiftName + '(' + ShiftDetails[s].startTime.substring(0, 5) + ' - ' + ShiftDetails[s].endTime.substring(0, 5) + ')</label> &nbsp; &nbsp;'; } $("#ShiftDetails").html(''); $("#ShiftDetails").append(shiftDetail); if (tripIn != null) { var tripInTable = new triptable('tripInTableMS', '0', 'btnAddCol1', 'btnTripSave', 'btnTrip1Remove', tripIn, TripInHeadwayPlan, TripInRoute, TripOutRoute, ShiftDetails); } if (tripOut != null) { var tripOutTable = new triptable('tripOutTableMS', '1', 'btnAddCol2', 'btnTripSave', 'btnTrip2Remove', tripOut, TripOutHeadwayPlan, TripInRoute, TripOutRoute, ShiftDetails); } $.unblockUI(); $('#tripDialogDiv').show(); $('#HeadwayPopUp').show(); $('#NoTripGenerated').hide(); $("#TripInBox").show(); $("#TripOutBox").hide(); } }, error: function (response) { alert("error : " + response); } }); } }

I have added below code in my application.我在我的应用程序中添加了以下代码。

 private static void AddToBackingStore(JsonDotNetValueProviderFactory.EntryLimitedDictionary backingStore, string prefix, object value) { IDictionary<string, object> dictionary = value as IDictionary<string, object>; if (dictionary != null) { foreach (KeyValuePair<string, object> keyValuePair in (IEnumerable<KeyValuePair<string, object>>)dictionary) JsonDotNetValueProviderFactory.AddToBackingStore(backingStore, JsonDotNetValueProviderFactory.MakePropertyKey(prefix, keyValuePair.Key), keyValuePair.Value); } else { IList list = value as IList; if (list != null) { for (int index = 0; index < list.Count; ++index) JsonDotNetValueProviderFactory.AddToBackingStore(backingStore, JsonDotNetValueProviderFactory.MakeArrayKey(prefix, index), list[index]); } else backingStore.Add(prefix, value); } } private static object GetDeserializedObject(ControllerContext controllerContext) { if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase)) return (object)null; string end = new StreamReader(controllerContext.HttpContext.Request.InputStream).ReadToEnd(); if (string.IsNullOrEmpty(end)) return (object)null; var serializer = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }; return serializer.DeserializeObject(end); } public override IValueProvider GetValueProvider(ControllerContext controllerContext) { if (controllerContext == null) throw new ArgumentNullException("controllerContext"); object deserializedObject = JsonDotNetValueProviderFactory.GetDeserializedObject(controllerContext); if (deserializedObject == null) return (IValueProvider)null; Dictionary<string, object> dictionary = new Dictionary<string, object>((IEqualityComparer<string>)StringComparer.OrdinalIgnoreCase); JsonDotNetValueProviderFactory.AddToBackingStore(new JsonDotNetValueProviderFactory.EntryLimitedDictionary((IDictionary<string, object>)dictionary), string.Empty, deserializedObject); return (IValueProvider)new DictionaryValueProvider<object>((IDictionary<string, object>)dictionary, CultureInfo.CurrentCulture); } private static string MakeArrayKey(string prefix, int index) { return prefix + "[" + index.ToString((IFormatProvider)CultureInfo.InvariantCulture) + "]"; } private static string MakePropertyKey(string prefix, string propertyName) { if (!string.IsNullOrEmpty(prefix)) return prefix + "." + propertyName; return propertyName; } private class EntryLimitedDictionary { private static int _maximumDepth = JsonDotNetValueProviderFactory.EntryLimitedDictionary.GetMaximumDepth(); private readonly IDictionary<string, object> _innerDictionary; private int _itemCount; public EntryLimitedDictionary(IDictionary<string, object> innerDictionary) { this._innerDictionary = innerDictionary; } public void Add(string key, object value) { if (++this._itemCount > JsonDotNetValueProviderFactory.EntryLimitedDictionary._maximumDepth) throw new InvalidOperationException("JsonValueProviderFactory_RequestTooLarge"); this._innerDictionary.Add(key, value); } private static int GetMaximumDepth() { NameValueCollection appSettings = ConfigurationManager.AppSettings; if (appSettings != null) { string[] values = appSettings.GetValues("aspnet:MaxJsonDeserializerMembers"); int result; if (values != null && values.Length > 0 && int.TryParse(values[0], out result)) return result; } return 1000; } }

And in global.ascx file I have added below lines在 global.ascx 文件中,我添加了以下几行

 foreach (var factory in ValueProviderFactories.Factories) { if (factory.GetType().FullName == "System.Web.Mvc.JsonValueProviderFactory") { jsonFactory = factory; break; } } if (jsonFactory != null) { ValueProviderFactories.Factories.Remove(jsonFactory); } ValueProviderFactories.Factories.Add(new JsonDotNetValueProviderFactory());

It was working fine for few months.它工作了几个月很好。 Now again the data length increased and started to getting the error again.现在数据长度再次增加并再次开始出现错误。

Please let me know if anybody have any suggestion to solve this issue.如果有人对解决此问题有任何建议,请告诉我。

Json result have some default length. Json 结果有一些默认长度。 Whenever it exceeds, it throw above error.每当超过时,它就会抛出上述错误。

For this you have 2 approach either add length in web.config or while return your action method define length.为此,您有 2 种方法,要么在 web.config 中添加长度,要么返回您的操作方法定义长度。

for Web.config对于Web.config

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

or while return jsonresult in Controller method, define return length as max length of your string.或者在 Controller 方法中返回 jsonresult 时,将返回长度定义为字符串的最大长度。

return new JsonResult()
            {
                ContentEncoding = Encoding.Default,
                ContentType = "application/json",
                Data = data,
                JsonRequestBehavior = requestBehavior,
                MaxJsonLength = int.MaxValue
            };

Please refer The length of the string exceeds the value set on the maxJsonLength property请参阅字符串的长度超过了 maxJsonLength 属性上设置的值

Can I set an unlimited length for maxJsonLength in web.config? 我可以在 web.config 中为 maxJsonLength 设置无限长度吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 MVC4错误:字符串的长度超过了在maxJsonLength属性上设置的值 - MVC4 error: The length of the string exceeds the value set on the maxJsonLength property 字符串的长度超过maxJsonLength属性上设置的值 - length of the string exceeds the value set on the maxJsonLength property 字符串的长度超过maxJsonLength属性c上设置的值。 - The length of the string exceeds the value set on the maxJsonLength property.c# 正在检测字符串的长度超过在服务器上的maxJsonLength属性上设置的值 - Detecting The length of the string exceeds the value set on the maxJsonLength property at the server 我收到“字符串的长度超过 maxJsonLength 属性上设置的值” - I am getting a “The length of the string exceeds the value set on the maxJsonLength property” 错误“字符串的长度超过了 maxJsonLength 属性上设置的值。” - Error 'The length of the string exceeds the value set on the maxJsonLength property.' 尝试将部分视图转换为字符串时,“字符串的长度超出了在maxJsonLength属性上设置的值。” - “The length of the string exceeds the value set on the maxJsonLength property.” when trying to convert a partial view to string ASP.Net WebForm c#Web服务-字符串的长度超过在maxJsonLength属性上设置的值 - ASP.Net WebForm c# WebService - The length of the string exceeds the value set on the maxJsonLength property 使用JSON JavaScriptSerializer时发生错误“字符串的长度超过了在maxJsonLength属性上设置的值” - Error when using JSON JavaScriptSerializer “The length of the string exceeds the value set on the maxJsonLength property” JavaScript中View转换ViewBag.JsonData时,得到 The length of the string exceeds the value set on the maxJsonLength property - While converting ViewBag.JsonData from View in JavaScript, getting The length of the string exceeds the value set on the maxJsonLength property
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM