Estou recebendo este erro:
A solicitação JSON era muito grande para ser desserializada.
Aqui está um cenário em que isso ocorre. Eu tenho uma classe de país que possui uma lista de portos desse país
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
public List<Port> Ports { get; set; }
}
Eu uso o KnockoutJS no lado do cliente para criar uma lista suspensa em cascata. Portanto, temos uma série de duas caixas suspensas, onde a primeira é o país e a segunda são os portos desse país.
Tudo está funcionando bem até agora, este é o meu script do lado do cliente:
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,
};
} ();
O problema ocorre quando um país como a China é selecionado, com muitos portos. Então, se você tem 3 ou 4 vezes "China" em sua matriz e eu quero enviá-lo ao servidor para salvar. O erro ocorre.
O que devo fazer para remediar isso?
asp.net-mvc
knockout.js
Kayvan Karim
fonte
fonte
Respostas:
Você precisa ajustar a propriedade maxJsonLength para um valor mais altoweb.config
para resolver o problema.Defina um valor mais alto para
aspnet:MaxJsonDeserializerMembers
no appSettings:Se essas opções não estiverem funcionando, você pode tentar criar uma fábrica de provedor de valor json personalizada usando JSON.NET, conforme especificado neste encadeamento .
fonte
aspnet:MaxJsonDeserializerMembers
trabalhou para mim também. Alguém sabe onde isso está realmente documentado?Se você não deseja alterar uma configuração global na configuração da web
O uso de uma configuração global ativará grandes respostas json em todo o aplicativo, o que pode abrir um ataque de negação de serviço.
Se alguns locais de escolha forem permitidos, você poderá usar muito rapidamente outro serializador json usando o método Content da seguinte maneira:
fonte