Запрос превышает настроенную maxQueryStringLength при использовании [Авторизовать]
У меня есть сайт 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, но это привело к этой же проблеме, и принятый ответ никоим образом не помог.