Ошибка MVC maxJsonLength

Я борюсь с ошибкой 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)

взгляните на этот ответ stackoverflow.com/a/11438332/2417602

vikscool 18.05.2018 11:25

@vikscool Спасибо, но, к сожалению, это не помогает. Но хорошо знать, что maxRequestLength находится в КБ.

daniell89 18.05.2018 11:31

если это не помогает, можете попробовать отправить запрос небольшими частями вместо одного большого запроса данных.

vikscool 18.05.2018 11:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
99
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел способ обойти эту проблему. Я изменил тип содержимого в методе 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
}

Другие вопросы по теме