Запрос превышает настроенный maxQueryStringLength при использовании [Authorize]
У меня есть сайт MVC3 в C#, у меня есть конкретное представление, передаваемое параметрами запроса из функции JavaScript, функция перенаправляет на сайт через
window.location.href = "../ActionName?" + query_string;
query_string - строка параметров динамического запроса, созданная функцией JavaScript.
Причина этой странности заключается в том, что иногда одна и та же функция передает URL веб-форме ASP.Net из-за необходимости использовать элемент управления reportviewer, альтернативное действие - сохранить некоторые параметры, в этом случае они передаются в представление. (Могу рассказать подробнее, если это не имеет смысла)
Все работает нормально, пока я не введу [Authorize] в метод действия. Разрывы, если они на месте, отлично работают без, и [Authorize] отлично работает на всех других методах.
Полный URL в этом случае имеет длину 966 символов, после исследования кажется, что значение maxQueryStringLength по умолчанию равно 2048, но оно может быть переопределено на любое значение типа integer, поэтому просто для ухищрения я добавил
<security>
<requestFiltering>
<requestLimits maxQueryString="2048"></requestLimits>
</requestFiltering>
</security>
ключ к файлу веб-конфигурации под ключом.
Радости нет, поэтому я стал смешным и сделал это 4096, но все равно радости не было.
Теперь, когда весь URL-адрес имеет длину 966 символов, атрибут authorize не может серьезно добавлять еще 1082-3130 символов, поэтому как я могу определить, что это за ошибка на самом деле или почему параметр не вступает в силу.
VS2010 Pro SP1
4 ответа
Когда поступает неавторизованный запрос, весь запрос кодируется URL-адресом и добавляется в виде строки запроса в запрос к форме авторизации, поэтому я могу видеть, где это может привести к проблеме, учитывая вашу ситуацию.
Согласно MSDN, правильный элемент для изменения для сброса maxQueryStringLength в web.config является <httpRuntime>
элемент внутри <system.web>
см. элемент httpRuntime (схема настроек ASP.NET). Попробуйте изменить этот элемент.
В корне web.config
для вашего проекта, под system.web
узел:
<system.web>
<httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
...
Кроме того, я должен был добавить это под system.webServer
узел или я получил ошибку безопасности для моих длинных строк запроса:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxUrl="10999" maxQueryString="2097151" />
</requestFiltering>
</security>
...
У меня есть эта ошибка, используя datatables.net
я исправил изменение ajax по умолчанию Get to POST в свойствах DataTable()
"ajax": {
"url": "../ControllerName/MethodJson",
"type": "POST"
},
Для всех, кто может столкнуться с этой проблемой, и она не решается ни одним из перечисленных выше вариантов, это то, что сработало для меня.
1. Click on the website in IIS
2. Double Click on Authentication under IIS
3. Enable Anonymous Authentication
Я отключил это, потому что мы использовали нашу собственную аутентификацию, но это привело к той же самой проблеме, и принятый ответ никак не помог.