Запрос превышает настроенную maxQueryStringLength при использовании [Авторизовать]

enter image description here
У меня есть сайт MVC3 в С#, у меня есть определенное представление, которое передают параметры запроса из функции JavaScript, функция перенаправляет на сайт с помощью

window.location.href= "../ActionName?" + query_string;

query_string - строка параметров динамических запросов, построенная функцией JavaScript.

Причиной этой странности является то, что иногда одна и та же функция передает URL-адрес веб-формы ASP.Net из-за необходимости использования элемента управления reportviewer, альтернативное действие заключается в сохранении некоторых параметров в этом он переходит к представлению. (Можете уточнить, если это не имеет смысла)

Все работает отлично, пока я не представлю [Authorize] методу действия. Перерывы, если он на месте, отлично работает, и [Авторизовать] отлично работает во всех других методах.

Весь URL-адрес в этом случае составляет 966 символов, после исследования кажется, что значение maxQueryStringLength по умолчанию равно 2048, но может быть переопределено для любого значения типа integer, поэтому просто для усмешек я добавил

<security>
  <requestFiltering>
    <requestLimits maxQueryString="2048"></requestLimits>
  </requestFiltering>
</security>

к файлу веб-конфигурации под ключом.

Никакой радости нет, поэтому я стал смешным и сделал это 4096, до сих пор нет радости.

Теперь, когда весь URL-адрес имеет длину 966 символов, атрибут authorize не может серьезно добавлять другие символы 1082-3130, поэтому как я могу определить, что на самом деле является ошибкой, или почему параметр не вступает в силу.

VS2010 Pro SP1

Ответы

Ответ 1

Когда приходит несанкционированный запрос, весь запрос кодируется URL-адресом и добавляется в виде строки запроса к форме авторизации, поэтому я могу видеть, где это может привести к возникновению проблемы с учетом вашей ситуации.

Согласно MSDN, правильный элемент для изменения до reset maxQueryStringLength в web.config является элементом <httpRuntime> внутри элемента <system.web>, см. httpRuntime Element (ASP.NET Settings Schema). Попробуйте изменить этот элемент.

Ответ 2

В корне web.config для вашего проекта в разделе system.web node:

<system.web>
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
...

Кроме того, мне пришлось добавить это под system.webServer node, или я получил ошибку безопасности для моих длинных строк запроса:

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
...

Ответ 3

У меня есть эта ошибка с использованием datatables.net

i исправлено изменение значения по умолчанию ajax. Получить POST в те свойствах DataTable()

"ajax": {
        "url": "../ControllerName/MethodJson",
        "type": "POST"
    },

Ответ 4

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

1. Click on the website in IIS
2. Double Click on Authentication under IIS
3. Enable Anonymous Authentication

Я отключил это, потому что мы использовали наш собственный Auth, но это привело к этой же проблеме, и принятый ответ никоим образом не помог.