Як налаштувати web.config, щоб дозволити запити будь-якої довжини


138

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

У мене є код для цього, але я отримую цю помилку

Помилка HTTP 404.15 - не знайдено Модуль фільтрації запитів налаштований для відмови у запиті, коли рядок запиту занадто довгий.

Чи є спосіб це змінити, щоб я міг обробляти запити будь-якого розміру?

Якщо ні, чи існує спосіб генерування файлів на стороні клієнта без використання файлової системи / активного об'єкта x?

Дякую


8
Що ви хочете врахувати, це те, що навіть незважаючи на те, що довжина рядка запиту може бути налаштована для IIS або вашої програми, існує стандарт HTTP для довжини URL-адреси. Оскільки ви використовуєте рядок запиту, ви передаєте значення як частину URL-адреси. Максимальна довжина символу URL-адреси - 2000 символів. Якщо ваші значення будуть довгими рядками, краще було б розмістити значення POST, а не передавати їх у рядок запиту.
Jeff LaFay

2
Погодьтеся з Джафаєм. Найкраща практика - розмістити значення, коли у вас більше 2-3 простих параметрів. і коли ви використовуєте рядок запиту, обов'язково зашифруйте їх.
Джек

Відповіді:


243

Додайте до свого web.config:

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

Побачити:

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

Оновлено для відображення коментарів.

requestLimits Element for requestФільтр [Схема налаштувань IIS]

Можливо, вам доведеться також додати наступне у свій web.config

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

Дивіться: httpRuntime Element (Схема налаштувань ASP.NET)

Звичайно, цифри (32768 і 65536) у налаштуваннях конфігурації, наведені вище, - лише приклади. Не потрібно використовувати ці точні значення.


24
Це одне мені було недостатньо. Мені довелося також додати це до розділу system.web: <httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick

2
nnn - максимальна довжина рядка, яку ви хочете дозволити, наприклад, 32768
Matt Varblow

не працює дивись це stackoverflow.com/questions/31624710/…
Jitendra Pancholi

Я спробував кожен окремо, встановивши вузол безпеки під system.webServer, а потім видаливши та просто додавши атрибути до вузла httpRuntime. Мені однозначно потрібні були обоє для роботи. Велике дякую!
Девід Гундерсон

2
Примітка: тег <httpRuntime> йде під <system.web> : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </
system.web

33

У моєму випадку (Visual Studio 2012 / IIS Express / ASP.NET MVC 4 app / .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
Для мене саме активація = "правда" стала магією:
Йоганн Комбрінк

6

Щось ще потрібно перевірити: якщо ваш сайт використовує MVC, це може статися, якщо ви додали [Авторизувати] до свого класу контролерів входу. Він не може отримати доступ до методу входу, оскільки він не авторизований, тому він перенаправляє на метод входу -> boom.


Дякую! У мене виникла ця проблема, оскільки я перемістив Меню / Навігацію до часткового перегляду та іншого контролера, який не дозволяв анонімних з'єднань.
Westerlund.io

Інший випадок, коли повідомлення про помилку, хоча істинне, не має жодного стосунку до фактичної проблеми.
Стів Сміт

1
Ознайомтеся також із властивостями проекту, оскільки можливо, що автентифікація Windows "увімкнена", а анонімна автентифікація вимкнена ". Прочитайте цю детальну статтю - Помилка (Visual Studio 2013, MVC5): Модуль фільтрації запитів налаштований для відхилення запиту, коли рядок запиту занадто довгий
fujiFX

5

Якщо ви зіткнулися з цією проблемою під час запуску веб-сервера IIS 8.5, ви можете скористатися наступним методом.

Спочатку знайдіть модуль «Запити фільтрування» на веб-сайті IIS, над яким ви працюєте, а потім двічі клацніть по ньому ...

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

Далі вам потрібно натиснути правою кнопкою миші білу область, показану нижче, а потім натиснути опцію контекстного меню під назвою "Редагувати параметри функції" .

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

Тоді останнє, що потрібно зробити - це змінити значення "Максимальний рядок запиту (байтів)" з 2048 року на щось більш відповідне, наприклад, 5000 для ваших потреб.

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


Дякую, це для мене найпростіше та
найпрацююче

Дякую, друже!!!!!
Нубі

0

У мене була подібна проблема, що намагалася розгорнути веб-додаток ASP до IIS 8. Щоб виправити це, я зробив так, як запропонували вище Метт і Леніел. Але також довелося налаштувати налаштування аутентифікації мого сайту, щоб увімкнути анонімну автентифікацію. І це працювало для мене.


0

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


0

Якщо ваш веб-сайт використовує автентифікацію, але у вас немає правильного методу аутентифікації, встановленого в IIS (наприклад, Basic, Forms тощо), браузер застрягне в циклі переспрямування. Це призводить до того, що URL-адреса переадресації стає довшою і довшою, поки вона не вибухне.


0

Він також створить помилку, коли ви передасте велику рядок у параметрі виклику ajax.

тож для цього завжди використовувати тип публікації в 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має тег властивістьmethod get / set state.

Якщо так, methodвластивість слід видалити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.