Как настроить web.config для разрешения запросов любой длины

138

Я строю сайт, на котором я хотел бы создать сторону клиентского файла из значения элемента textarea.

У меня есть код для этого, но я получаю эту ошибку

Ошибка HTTP 404.15 - не найден Модуль фильтрации запросов настроен на отклонение запроса, если строка запроса слишком длинная.

Есть ли способ переопределить это, чтобы я мог обрабатывать запросы любого размера?

Если нет, то есть ли способ генерировать файлы на стороне клиента без использования объекта файловая система / активный x?

Спасибо

some_bloody_fool
источник
8
Вы хотите учесть, что, хотя длина строки запроса может быть настроена для IIS или вашего приложения, существует стандарт HTTP для длины URL. Поскольку вы используете строку запроса, вы передаете значения как часть URL. Максимальная длина символа URL составляет 2000 символов. Если ваши значения будут длинными строками, было бы лучше POST значения, а не передавать их в строке запроса.
Джефф ЛаФай
2
Согласитесь с Джлафаем. Рекомендуется размещать значения, когда у вас есть более 2-3 простых параметров. и когда вы используете строку запроса, обязательно зашифруйте их.
Джек,

Ответы:

244

Добавьте следующее в ваш web.config:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxQueryString="32768"/>
    </requestFiltering>
  </security>
</system.webServer>

Видеть:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

Обновлено, чтобы отразить комментарии.

Элемент requestLimits для requestFiltering [Схема настроек IIS]

Возможно, вам также придется добавить следующее в ваш web.config

<system.web>
    <httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/>
</system.web>

См .: Элемент httpRuntime (схема настроек ASP.NET)

Конечно, числа (32768 и 65536) в настройках конфигурации выше являются лишь примерами. Вам не нужно использовать эти точные значения.

Мэтт Варблоу
источник
24
Одного этого было недостаточно для меня. Мне также пришлось добавить это в раздел system.web: <httpRuntime maxQueryStringLength = "8192" />
Роб Седжвик,
2
nnn - максимальная длина строки, которую вы хотите разрешить, например, 32768
Мэтт Варблоу,
не работает, смотрите этот stackoverflow.com/questions/31624710/…
Джитендра Панчоли
Я попробовал каждый из них в отдельности, установив узел безопасности в system.webServer, а затем удалив и просто добавив атрибуты в узел httpRuntime. Мне определенно нужны были оба для работы. Большое спасибо!
Дэвид Гандерсон
2
Примечание. Тег <httpRuntime> находится в разделе <system.web> : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay
33

В моем случае (Visual Studio 2012 / IIS Express / приложение ASP.NET MVC 4 / .Net Framework 4.5) то, что действительно работало после 30 минут проб и ошибок, устанавливало maxQueryStringLengthсвойство в <httpRuntime>теге:

<httpRuntime targetFramework="4.5" maxQueryStringLength="10240" enable="true" />

maxQueryStringLengthпо умолчанию 2048.

Подробнее об этом здесь:

Расширение диапазона допустимых URL


Я попытался установить его, <system.webServer>как подсказывает @MattVarblow , но это не сработало ... и это потому, что я использую IIS Express (на основе IIS 8) на моей машине с Windows 8.

Когда я развернул свое приложение в производственной среде (Windows Server 2008 R2 с IIS 7), IE 10 начал возвращать 404 ошибки в запросах AJAX с длинными строками запросов. Затем я подумал, что проблема связана со строкой запроса, и попробовал ответ @ MattVarblow. Он просто работал на IIS 7. :)

Лениэль Маккаферри
источник
2
Для меня это было enable = "true", которое сделало волшебство :)
Иоганн Комбринк
6

Что еще нужно проверить: если ваш сайт использует MVC, это может произойти, если вы добавили [Authorize] в свой класс контроллера входа в систему. Он не может получить доступ к методу входа в систему, потому что он не авторизован, поэтому он перенаправляет на метод входа в систему -> boom.

SteveCav
источник
Спасибо! Я столкнулся с этой проблемой, потому что я переместил Меню / Навигация в частичное представление и другой Контроллер, который не позволял анонимные соединения.
Westerlund.io
Другой случай, когда сообщение об ошибке, хотя и истинно, не имеет отношения к реальной проблеме.
Стив Смит
1
Также проверьте свойства проекта, так как это может означать, что аутентификация Windows «включена», а анонимная аутентификация отключена ». Просьба ознакомиться с этой подробной статьей - Ошибка (Visual Studio 2013, MVC5): модуль фильтрации запросов настроен на
отклонение
5

Если вы столкнулись с этой проблемой при запуске веб-сервера IIS 8.5, вы можете использовать следующий метод.

Сначала найдите модуль «Фильтрация запросов» на сайте IIS, над которым вы работаете, затем дважды щелкните его ...

введите описание изображения здесь

Затем вам нужно щелкнуть правой кнопкой мыши в белой области, показанной ниже, затем выбрать опцию контекстного меню под названием «Редактировать настройки функций» .

введите описание изображения здесь

Затем последнее, что нужно сделать, это изменить значение «Максимальная строка запроса (байт)» с 2048 на более подходящее, например 5000, для ваших нужд.

введите описание изображения здесь

Арво Боуэн
источник
Спасибо, это самое простое и рабочее решение для меня
Афиф Зафри
Спасибо друг!!!!!
Noobie
0

У меня была похожая проблема при попытке развернуть веб-приложение ASP на IIS 8. Чтобы исправить это, я сделал, как предложили Мэтт и Лениэль выше. Но также пришлось настроить параметры аутентификации на моем сайте, чтобы включить анонимную аутентификацию. И это сработало для меня.

Рональд Нсабиера
источник
0

Мне пришлось добавить [AllowAnonymous] в функции ActionResult на моей странице входа в систему, потому что пользователь еще не прошел аутентификацию.

Эндрю Гейл
источник
0

Если на вашем веб-сайте используется проверка подлинности, но в IIS не настроен правильный метод проверки подлинности (например, Basic, Forms и т. Д.), То браузер застрянет в цикле перенаправления. Это заставляет URL перенаправления становиться все длиннее и длиннее, пока не взорвется.

Стив Смит
источник
0

Это также сгенерирует ошибку, когда вы передадите большую строку в параметре вызова ajax.

так что для этого всегда используйте тип post в ajax, чтобы решить вашу проблему на 100%, и нет необходимости устанавливать длину в web.config.

// var UserId = массив из 1000 идентификаторов пользователей

$ .ajax ({global: false, url: SitePath + "/ User / getAussizzMembersData", "data": {UserIds: UserId}, "type": "POST", "dataType": "JSON"}}

Ринку Чоудхари
источник
-1

Ошибка HTTP 404.15 - не найден Модуль фильтрации запросов настроен на отклонение запроса, если строка запроса слишком длинная.

Чтобы решить эту проблему, проверьте в исходном коде, есть ли у Formтега свойство methodget / set state.

Если так, methodсобственность должна быть удалена.

user3635095
источник