У меня есть сайт MVC3 на C #, у меня есть конкретное представление, в которое загружаются параметры запроса из функции 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 с пакетом обновления 1 (SP1)
источник
Ответы:
Когда поступает неавторизованный запрос, весь запрос кодируется в URL-адресе и добавляется в виде строки запроса к запросу в форму авторизации, поэтому я могу видеть, где это может привести к проблеме в вашей ситуации.
Согласно MSDN, правильный элемент, который нужно изменить для сброса maxQueryStringLength в web.config, - это
<httpRuntime>
элемент внутри<system.web>
элемента, см. Элемент httpRuntime (схема параметров ASP.NET) . Попробуйте изменить этот элемент.источник
В корне
web.config
вашего проекта подsystem.web
узлом:Кроме того, мне пришлось добавить это под
system.webServer
узлом, иначе я получил ошибку безопасности для моих длинных строк запроса:источник
maxQueryString
это длина в байтах как uint с максимальным значением 4294967295 иmaxQueryStringLength
длина в символах как int, но с диапазоном 0-2097151.Для всех, кто может столкнуться с этой проблемой, и она не решена ни одним из вышеперечисленных вариантов, это то, что сработало для меня.
Я отключил это, потому что мы использовали наш собственный Auth, но это привело к той же проблеме, и принятый ответ никоим образом не помог.
источник
у меня эта ошибка с использованием datatables.net
Я исправил изменение по умолчанию ajax Get на POST в свойствах DataTable ()
источник