Jak skonfigurować plik web.config, aby zezwalał na żądania o dowolnej długości

138

Buduję witrynę, w której chciałbym utworzyć plik po stronie klienta z wartości elementu textarea.

Mam kod, aby to zrobić, ale otrzymuję ten błąd

Błąd HTTP 404.15 - nie znaleziono Moduł filtrowania żądań jest skonfigurowany do odrzucania żądania, w którym ciąg zapytania jest zbyt długi.

Czy istnieje sposób, aby to zmienić, aby móc przetwarzać żądania o dowolnej wielkości?

Jeśli nie, czy istnieje sposób na generowanie plików po stronie klienta bez użycia systemu plików / aktywnego obiektu x?

dzięki

some_bloody_fool
źródło
8
Należy wziąć pod uwagę, że chociaż długość ciągu zapytania może być konfigurowalna dla usług IIS lub aplikacji, istnieje standard HTTP dla długości adresu URL. Ponieważ używasz ciągu zapytania, przekazujesz wartości jako część adresu URL. Maksymalna długość znaków w adresie URL to 2000 znaków. Jeśli twoje wartości będą długimi ciągami, najlepiej będzie POST wartości, zamiast przekazywania ich w ciągu zapytania.
Jeff LaFay
2
Zgadzam się z Jlafay. Najlepszą praktyką jest POST wartości, gdy masz więcej niż 2-3 proste parametry. a kiedy używasz ciągu zapytania, pamiętaj, aby je zaszyfrować.
Jack

Odpowiedzi:

243

Dodaj następujące elementy do swojego pliku web.config:

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

Widzieć:

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

Zaktualizowano w celu odzwierciedlenia komentarzy.

requestLimits, element requestFiltering [schemat ustawień usług IIS]

Być może będziesz musiał dodać następujące elementy w swoim pliku web.config

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

Zobacz: httpRuntime Element (schemat ustawień ASP.NET)

Oczywiście liczby (32768 i 65536) w ustawieniach konfiguracji powyżej to tylko przykłady. Nie musisz używać tych dokładnych wartości.

Matt Varblow
źródło
24
Samo to mi nie wystarczało. Musiałem również dodać to do sekcji system.web: <httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick
2
nnn to maksymalna długość struny, na jaką chcesz zezwolić, np. 32768
Matt Varblow
nie działa zobacz ten stackoverflow.com/questions/31624710/…
Jitendra Pancholi
Wypróbowałem każdy z nich indywidualnie, ustawiając węzeł bezpieczeństwa w system.webServer, a następnie usuwając i dodając atrybuty do węzła httpRuntime. Zdecydowanie potrzebowałem obu do pracy. Wielkie dzięki!
David Gunderson
2
Uwaga: tag <httpRuntime> trafia do <system.web> : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay
33

W moim przypadku (Visual Studio 2012 / IIS Express / ASP.NET MVC 4 app / .Net Framework 4.5) tym, co naprawdę zadziałało po 30 minutach prób i błędów, było ustawienie maxQueryStringLengthwłaściwości w <httpRuntime>tagu:

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

maxQueryStringLengthdomyślnie 2048.

Więcej na ten temat tutaj:

Rozszerzenie zakresu dozwolonych adresów URL


Próbowałem ustawić go <system.webServer>tak, jak sugeruje @MattVarblow , ale nie zadziałało ... a to dlatego, że używam IIS Express (opartego na IIS 8) na mojej maszynie deweloperskiej z Windows 8.

Kiedy wdrożyłem aplikację w środowisku produkcyjnym (Windows Server 2008 R2 z usługami IIS 7), przeglądarka IE 10 zaczęła zwracać błędy 404 w żądaniach AJAX z długimi ciągami zapytań. Potem pomyślałem, że problem jest związany z ciągiem zapytania i wypróbowałem odpowiedź @ MattVarblow. Po prostu działało w IIS 7. :)

Leniel Maccaferri
źródło
2
Dla mnie to enable = "true" sprawiło, że magia się wydarzyła :)
Johann Combrink
6

Coś jeszcze do sprawdzenia: jeśli Twoja witryna używa MVC, może się to zdarzyć, jeśli dodałeś [Authorize] do klasy kontrolera logowania. Nie może uzyskać dostępu do metody logowania, ponieważ nie jest autoryzowana, więc przekierowuje do metody logowania -> boom.

SteveCav
źródło
Dzięki! Doświadczyłem tego problemu, ponieważ przeniosłem Menu / Nawigację do częściowego widoku i innego kontrolera, który nie pozwalał na anonimowe połączenia.
Westerlund.io,
Kolejny przypadek, w którym komunikat o błędzie, chociaż prawdziwy, nie ma związku z rzeczywistym problemem.
Steve Smith
1
Sprawdź również właściwości projektu, ponieważ może się zdarzyć, że uwierzytelnianie systemu Windows jest „włączone”, a uwierzytelnianie anonimowe jest wyłączone ”. Pls sprawdź ten szczegółowy artykuł - Błąd (Visual Studio 2013, MVC5): Moduł filtrowania żądań jest skonfigurowany do odrzucania żądania, w którym ciąg zapytania jest zbyt długi
fujiFX
5

Jeśli napotkasz ten problem podczas uruchamiania serwera internetowego IIS 8.5, możesz użyć następującej metody.

Najpierw znajdź moduł „Request Filtering” w witrynie IIS, nad którą pracujesz, a następnie kliknij go dwukrotnie ...

wprowadź opis obrazu tutaj

Następnie należy kliknąć prawym przyciskiem myszy biały obszar pokazany poniżej, a następnie kliknąć opcję menu kontekstowego o nazwie „Edytuj ustawienia funkcji” .

wprowadź opis obrazu tutaj

Ostatnią rzeczą do zrobienia jest zmiana wartości „Maksymalny ciąg zapytania (bajty)” z 2048 na coś bardziej odpowiedniego, np. 5000, odpowiadającego Twoim potrzebom.

wprowadź opis obrazu tutaj

Arvo Bowen
źródło
Dziękuję, to dla mnie najprostsze i działające rozwiązanie
Afif Zafri
Dzięki stary!!!!!
Noobie
0

Miałem podobny problem, próbując wdrożyć aplikację internetową ASP w IIS 8. Aby to naprawić, zrobiłem tak, jak sugerowali Matt i Leniel powyżej. Ale musiałem również skonfigurować ustawienie uwierzytelniania mojej witryny, aby włączyć uwierzytelnianie anonimowe. I to zadziałało dla mnie.

Ronald Nsabiyera
źródło
0

Musiałem dodać [AllowAnonymous] do funkcji ActionResult na mojej stronie logowania, ponieważ użytkownik nie został jeszcze uwierzytelniony.

Andrew Gale
źródło
0

Jeśli witryna korzysta z uwierzytelniania, ale nie masz skonfigurowanej prawidłowej metody uwierzytelniania w usługach IIS (np. Basic, Forms itp.), Przeglądarka utknie w pętli przekierowań. To powoduje, że adres URL przekierowania staje się coraz dłuższy, aż eksploduje.

Steve Smith
źródło
0

Będzie również generować błąd podczas przekazywania dużego ciągu w parametrze wywołania ajax.

więc zawsze użyj typu post w Ajax, aby rozwiązać problem w 100% i nie ma potrzeby ustawiania długości w web.config.

// var UserId = tablica zawierająca 1000 identyfikatorów użytkowników

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

rinku Choudhary
źródło
-1

Błąd HTTP 404.15 - nie znaleziono Moduł filtrowania żądań jest skonfigurowany do odrzucania żądania, w którym ciąg zapytania jest zbyt długi.

Aby rozwiązać ten problem, sprawdź w kodzie źródłowym, czy Formtag ma właściwość w stanie methodget / set.

Jeśli tak, methodnieruchomość powinna zostać usunięta.

user3635095
źródło