запрос превышает настроенный maxQueryStringLength при использовании [Authorize] - PullRequest
118 голосов
/ 17 ноября 2011

enter image description here
У меня есть сайт 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 ]

199 голосов
/ 16 марта 2012

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

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

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

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
...
68 голосов
/ 17 ноября 2011

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

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

5 голосов
/ 06 августа 2014

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

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

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

4 голосов
/ 18 сентября 2015

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

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

"ajax": {
        "url": "../ControllerName/MethodJson",
        "type": "POST"
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...