Я борюсь с ошибкой maxJsonLength. Я передаю очень длинную строку xml (~ 4 МБ) из действия контроллера в метод javascript в представлении. Этот метод обрабатывает данные и отправляет их обратно с помощью AJAX другому методу контроллера, и здесь я получаю сообщение об ошибке.
Я установил MaxJsonLength в объекте JsonResult в методе контроллера, и нет проблем с передачей этой строки из контроллера в представление.
Но когда я пытаюсь вернуть его после обработки, я получаю сообщение об ошибке.
Это мой метод контроллера, который готовит данные:
private JsonResult PrepareXml(int someId)
{
// preparing data...
string xmlData = "..."; //(~4Mb)
JsonResult res = Json(xmlData);
res.MaxJsonLength = 10000000; // 10Mb
return res;
}
И это мой метод контроллера, который пытается обрабатывать данные, переданные из метода ajax:
private JsonResult GetProcesedXml(string resultXml)
{
// This method is not ivoking
}
И ниже мой метод сценария:
var data = {
someId: rowId,
};
$.ajax({
type: "POST",
url: "MyController/PrepareXml",
data: data,
contentType: "application/json; charset=utf-8",
success: function (result) {
// proces the result (big xml file)
//...
var processedResult = ""; // size of processedResult is a little bit bigger than 'result'
var data2 = {
resultXml: processedResult
};
$.ajax({
type: "POST",
url: "MyController/GetProcesedXml",
data: data2,
contentType: "application/json; charset=utf-8",
success: function (r) {
alert('success');
},
error: function (data) {
alert(data.responseText);
}
});
}
});
Что я уже пробовал:
<add key = "aspnet:MaxJsonDeserializerMembers" value = "2147483647" /> //(max value)
<requestLimits maxAllowedContentLength = "2097151000" /> //(max value)
<httpRuntime maxRequestLength = "10000" /> //(~10MB)
@vikscool Спасибо, но, к сожалению, это не помогает. Но хорошо знать, что maxRequestLength находится в КБ.
если это не помогает, можете попробовать отправить запрос небольшими частями вместо одного большого запроса данных.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я нашел способ обойти эту проблему. Я изменил тип содержимого в методе Ajax на «text / plain» и использовал JSON.stringify для данных моего файла xml.
var data2 = { resultXml: processedResult };
$.ajax({
type: "POST",
url: "MyController/GetProcesedXml",
data: JSON.stringify(data2),
contentType: "text/plain",
success: function (r) {
alert('success');
},
});
Еще одно изменение - в контроллере. Я прочитал файл из входного потока и проанализировал его, чтобы сформировать тип JSON:
private JsonResult GetProcesedXml()
{
JObject json = null;
Stream request = Request.InputStream;
using (StreamReader sr = new StreamReader(stream))
{
stream.Seek(0, System.IO.SeekOrigin.Begin);
json = JObject.Parse(sr.ReadToEnd());
}
string xmlSigninigResult = json["resultXml"].ToString();
// rest of the method
}
взгляните на этот ответ stackoverflow.com/a/11438332/2417602