Недопустимая длина для массива Base-64 в System.Web.UI.HiddenFieldPageStatePersister.Load () - PullRequest
3 голосов
/ 14 ноября 2011

Я понимаю, что эта ошибка возникает при получении запроса с усеченным или измененным Viewstate (если это не подтверждает кодировку base64).

Различные источники в Интернете указывают мне на следующие причины, по которым эта ошибка может возникать в связи с viewstate,

  1. Соединение было прервано во время выполнения запроса
  2. Браузер не смог отправить полный запрос
  3. Клиент изменяет запрос перед отправкой обратно на сервер

Среди возможных причин сервер получит указанную длину контента в заголовке только в 3-м случае.

Сказав это,

  • почему другие случаи не классифицируются как IIS как Плохой запрос?
  • Почему этот запрос даже передается в ASP.NET, если полученное содержимое не соответствует длине содержимого в заголовке запроса?

Я что-то здесь пропускаю? спасибо.

// Обновление 1

Ok. вот больше подробностей из моего анализа,

Когда соединение было прервано или прервано клиентом, ASP.NET выдает исключение, которое перехватывается в Application_Error global.ascx.

Интересно, что и здесь мы видим, что Request.ContentLength больше чем Context.Request.TotalBytes.

Для меня это, очевидно, означает, что запрос был полностью получен сервером. Это подтверждает, что IIS является подходящим кандидатом, чтобы обработать это и вообще не передавать запрос в ASP.NET.

Существует ли какая-либо конфигурация в IIS для достижения этой цели? Есть ли другие веские причины, почему IIS не делает этого по умолчанию?

Check the Exception and Watch windows in this screen shot

...