Я получаю эту ошибку:
Запрос JSON был слишком велик для десериализации.
Вот сценарий, где это происходит. У меня есть класс страны, в которой есть список портов доставки этой страны
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
public List<Port> Ports { get; set; }
}
Я использую KnockoutJS на стороне клиента, чтобы сделать каскадные выпадающие списки. Таким образом, у нас есть массив из двух выпадающих меню, где первый - страна, а второй - порты этой страны.
Пока все работает нормально, это мой скрипт на стороне клиента:
var k1 = k1 || {};
$(document).ready(function () {
k1.MarketInfoItem = function (removeable) {
var self = this;
self.CountryOfLoadingId = ko.observable();
self.PortOfLoadingId = ko.observable();
self.CountryOfDestinationId = ko.observable();
self.PortOfDestinationId = ko.observable();
};
k1.viewModel = function () {
var marketInfoItems = ko.observableArray([]),
countries = ko.observableArray([]),
saveMarketInfo = function () {
var jsonData = ko.toJSON(marketInfoItems);
$.ajax({
url: 'SaveMarketInfos',
type: "POST",
data: jsonData,
datatype: "json",
contentType: "application/json charset=utf-8",
success: function (data) {
if (data) {
window.location.href = "Fin";
} else {
alert("Can not save your market information now!");
}
},
error: function (data) { alert("Can not save your contacts now!"); }
});
},
loadData = function () {
$.getJSON('../api/ListService/GetCountriesWithPorts', function (data) {
countries(data);
});
};
return {
MarketInfoItems: marketInfoItems,
Countries: countries,
LoadData: loadData,
SaveMarketInfo: saveMarketInfo,
};
} ();
Проблема возникает, когда выбирается такая страна, как Китай, которая имеет много портов. Так что если у вас есть 3 или 4 раза «Китай» в вашем массиве, и я хочу отправить его на сервер для сохранения. Ошибка возникает.
Что я должен сделать, чтобы исправить это?
asp.net-mvc
knockout.js
Кайван Карим
источник
источник
Ответы:
Вы должны настроить свойство maxJsonLength на более высокое значение,web.config
чтобы решить проблему.Установите более высокое значение
aspnet:MaxJsonDeserializerMembers
в appSettings:Если эти параметры не работают, вы можете попробовать создать собственную фабрику провайдеров значений json с использованием JSON.NET, как указано в этой теме .
источник
aspnet:MaxJsonDeserializerMembers
работал для меня тоже. Кто-нибудь знает, где это на самом деле задокументировано?Если вы не хотите изменять глобальные настройки в веб-конфигурации
Использование глобального параметра активирует большие ответы json во всем приложении, что может привести к атаке типа «отказ в обслуживании».
Если это разрешено в нескольких местах, вы можете очень быстро использовать другой сериализатор json, используя метод Content, например:
источник