So konfigurieren Sie die Datei web.config, um Anforderungen beliebiger Länge zuzulassen

137

Ich erstelle eine Site, in der ich aus dem Wert eines Textarea-Elements eine Client-Seite für eine Datei erstellen möchte.

Ich habe den Code dafür, aber ich erhalte diesen Fehler

HTTP-Fehler 404.15 - Nicht gefunden Das Anforderungsfiltermodul ist so konfiguriert, dass eine Anforderung abgelehnt wird, bei der die Abfragezeichenfolge zu lang ist.

Gibt es eine Möglichkeit, dies zu überschreiben, damit ich Anfragen jeder Größe verarbeiten kann?

Wenn nicht, gibt es eine Möglichkeit, Dateien clientseitig zu generieren, ohne das Objekt Dateisystem / aktives x zu verwenden?

Vielen Dank

some_bloody_fool
quelle
8
Was Sie berücksichtigen möchten, ist, dass es einen HTTP-Standard für die URL-Länge gibt, obwohl die Länge der Abfragezeichenfolge möglicherweise für IIS oder Ihre Anwendung konfigurierbar ist. Da Sie eine Abfragezeichenfolge verwenden, übergeben Sie Werte als Teil der URL. Die maximale Länge der URL-Zeichen beträgt 2000 Zeichen. Wenn Ihre Werte lange Zeichenfolgen sein sollen, ist es am besten, die Werte zu POSTEN, anstatt sie in der Abfragezeichenfolge zu übergeben.
Jeff LaFay
2
Stimme Jlafay zu. Es wird empfohlen, die Werte zu POSTEN, wenn Sie mehr als 2-3 einfache Parameter haben. Wenn Sie eine Abfragezeichenfolge verwenden, müssen Sie diese unbedingt verschlüsseln.
Jack

Antworten:

242

Fügen Sie Ihrer web.config Folgendes hinzu:

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

Sehen:

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

Aktualisiert, um Kommentare wiederzugeben.

requestLimits Element für requestFiltering [IIS-Einstellungsschema]

Möglicherweise müssen Sie in Ihrer web.config auch Folgendes hinzufügen

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

Siehe: httpRuntime Element (ASP.NET-Einstellungsschema)

Natürlich sind die Zahlen (32768 und 65536) in den obigen Konfigurationseinstellungen nur Beispiele. Sie müssen diese genauen Werte nicht verwenden.

Matt Varblow
quelle
24
Das allein hat mir nicht gereicht. Ich musste dies auch zum Abschnitt system.web hinzufügen: <httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick
2
nnn ist die maximale Stringlänge, die Sie zulassen
möchten
funktioniert nicht siehe diese stackoverflow.com/questions/31624710/…
Jitendra Pancholi
Ich habe jeden einzeln ausprobiert, den Sicherheitsknoten unter system.webServer festgelegt und dann die Attribute entfernt und nur dem httpRuntime-Knoten hinzugefügt. Ich brauchte definitiv beides, um zu arbeiten. Danke vielmals!
David Gunderson
2
Hinweis: Das <httpRuntime> -Tag befindet sich unter <system.web> : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay
33

In meinem Fall (Visual Studio 2012 / IIS Express / ASP.NET MVC 4-App / .Net Framework 4.5) funktionierte das Festlegen der maxQueryStringLengthEigenschaft im <httpRuntime>Tag nach 30 Minuten Versuch und Irrtum wirklich :

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

maxQueryStringLengthStandardmäßig ist 2048.

Mehr dazu hier:

Erweitern des Bereichs zulässiger URLs


Ich habe versucht, es <system.webServer>so einzurichten , wie es @MattVarblow vorschlägt, aber es hat nicht funktioniert ... und das liegt daran, dass ich IIS Express (basierend auf IIS 8) auf meinem Entwicklungscomputer mit Windows 8 verwende.

Als ich meine App in der Produktionsumgebung (Windows Server 2008 R2 mit IIS 7) bereitstellte, gab IE 10 404-Fehler in AJAX-Anforderungen mit langen Abfragezeichenfolgen zurück. Dann dachte ich, dass das Problem mit der Abfragezeichenfolge zusammenhängt und versuchte es mit der Antwort von @ MattVarblow. Es hat gerade auf IIS 7 funktioniert. :)

Leniel Maccaferri
quelle
2
Für mich war es die Freigabe = "wahr", die die Magie möglich machte :)
Johann Combrink
6

Noch etwas zu überprüfen: Wenn Ihre Site MVC verwendet, kann dies passieren, wenn Sie Ihrer Login-Controller-Klasse [Authorize] hinzugefügt haben. Es kann nicht auf die Anmeldemethode zugreifen, da es nicht autorisiert ist und daher zur Anmeldemethode umleitet -> boom.

SteveCav
quelle
Vielen Dank! Dieses Problem trat auf, weil ich das Menü / die Navigation in eine Teilansicht und einen anderen Controller verschoben habe, der keine anonymen Verbindungen zuließ.
Westerlund.io
Ein weiterer Fall, in dem die Fehlermeldung zwar wahr ist, jedoch keinen Bezug zum eigentlichen Problem hat.
Steve Smith
1
Überprüfen Sie auch die Projekteigenschaften, da die Windows-Authentifizierung möglicherweise aktiviert und die anonyme Authentifizierung deaktiviert ist. Bitte lesen Sie
abgelehnt wird,
5

Wenn Sie beim Ausführen eines IIS 8.5-Webservers auf dieses Problem stoßen, können Sie die folgende Methode verwenden.

Suchen Sie zuerst das Modul "Anforderungsfilterung" auf der IIS-Site, an der Sie arbeiten, und doppelklicken Sie dann darauf ...

Geben Sie hier die Bildbeschreibung ein

Als nächstes müssen Sie mit der rechten Maustaste in den unten gezeigten weißen Bereich klicken und dann auf die Kontextmenüoption "Funktionseinstellungen bearbeiten" klicken .

Geben Sie hier die Bildbeschreibung ein

Als letztes müssen Sie den Wert "Maximale Abfragezeichenfolge (Bytes)" von 2048 in einen Wert ändern, der für Ihre Anforderungen besser geeignet ist, z. B. 5000 .

Geben Sie hier die Bildbeschreibung ein

Arvo Bowen
quelle
Vielen Dank, dies ist die einfachste und funktionierendste Lösung für mich
Afif Zafri
Danke Kumpel !!!!!
Noobie
0

Ich hatte ein ähnliches Problem beim Versuch, eine ASP-Webanwendung auf IIS 8 bereitzustellen. Um dies zu beheben, habe ich das getan, was Matt und Leniel oben vorgeschlagen haben. Musste aber auch die Authentifizierungseinstellung meiner Site konfigurieren, um die anonyme Authentifizierung zu aktivieren. Und das hat bei mir funktioniert.

Ronald Nsabiyera
quelle
0

Ich musste den ActionResult-Funktionen auf meiner Anmeldeseite [AllowAnonymous] hinzufügen, da der Benutzer noch nicht authentifiziert war.

Andrew Gale
quelle
0

Wenn Ihre Website die Authentifizierung verwendet, Sie jedoch nicht die richtige Authentifizierungsmethode in IIS eingerichtet haben (z. B. Basic, Forms usw.), bleibt der Browser in einer Umleitungsschleife stecken. Dies führt dazu, dass die Umleitungs-URL immer länger wird, bis sie explodiert.

Steve Smith
quelle
0

Es wird auch ein Fehler generiert, wenn Sie eine große Zeichenfolge im Ajax-Aufrufparameter übergeben.

Verwenden Sie daher immer die Option post in ajax, um das Problem zu 100% zu lösen, und Sie müssen die Länge nicht in web.config festlegen.

// var UserId = Array von 1000 Benutzer-IDs

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

Rinku Choudhary
quelle
-1

HTTP-Fehler 404.15 - Nicht gefunden Das Anforderungsfiltermodul ist so konfiguriert, dass eine Anforderung abgelehnt wird, bei der die Abfragezeichenfolge zu lang ist.

Um dieses Problem zu beheben, überprüfen Sie im Quellcode, ob das FormTag eine Eigenschaft methodhat, die den Status get / set hat.

In diesem methodFall sollte die Eigenschaft entfernt werden.

user3635095
quelle