Ich habe eine MVC3-Site in C #. Ich habe eine bestimmte Ansicht, die Abfrageparameter von einer JavaScript-Funktion erhält. Die Funktion leitet über zur Site weiter
window.location.href = "../ActionName?" + query_string;
query_string ist die dynamische Abfrageparameterzeichenfolge, die von der JavaScript-Funktion erstellt wird.
Der Grund für diese Verrücktheit ist, dass manchmal dieselbe Funktion die URL an ein ASP.Net-Webformular übergibt, da es das Reportviewer- Steuerelement verwenden muss. Die alternative Aktion besteht darin, einige Parameter zu speichern, in diesem Fall wird sie an die Ansicht übergeben. (Kann mehr ausarbeiten, wenn das keinen Sinn ergibt)
Das Ganze funktioniert einwandfrei, bis ich [Authorize] in die Aktionsmethode einführe. Bricht ab, wenn es vorhanden ist, funktioniert ohne ohne und [Autorisieren] funktioniert gut mit allen anderen Methoden.
Die gesamte URL ist in diesem Fall 966 Zeichen lang. Nach Recherchen scheint der maxQueryStringLength- Wert standardmäßig 2048 zu sein, kann jedoch auf einen beliebigen Wert vom Typ Integer überschrieben werden. Daher habe ich nur für Grinsen den Wert hinzugefügt
<security>
<requestFiltering>
<requestLimits maxQueryString="2048"></requestLimits>
</requestFiltering>
</security>
Schlüssel zur Webkonfigurationsdatei unter dem Schlüssel.
Keine Freude dort, also wurde ich lächerlich und machte es 4096, immer noch keine Freude.
Da die gesamte URL 966 Zeichen lang ist, kann das Autorisierungsattribut nicht ernsthaft weitere 1082-3130 Zeichen hinzufügen. Wie kann ich also feststellen, was der Fehler tatsächlich ist oder warum die Einstellung nicht wirksam wird?
VS2010 Pro SP1
quelle
Antworten:
Wenn eine nicht autorisierte Anfrage eingeht, wird die gesamte Anfrage URL-codiert und als Abfragezeichenfolge zur Anfrage zum Autorisierungsformular hinzugefügt, sodass ich sehen kann, wo dies in Ihrer Situation zu einem Problem führen kann.
Laut MSDN ist das richtige Element zum Ändern zum Zurücksetzen von maxQueryStringLength in web.config das
<httpRuntime>
Element innerhalb des<system.web>
Elements, siehe httpRuntime-Element (ASP.NET-Einstellungsschema) . Versuchen Sie, dieses Element zu ändern.quelle
Im Stammverzeichnis
web.config
Ihres Projekts unter demsystem.web
Knoten:Außerdem musste ich dies unter dem
system.webServer
Knoten hinzufügen, oder es wurde ein Sicherheitsfehler für meine langen Abfragezeichenfolgen angezeigt:quelle
maxQueryString
die Länge in Bytes als uint mit einem Maximalwert von 4294967295 undmaxQueryStringLength
die Länge in Zeichen als int, jedoch mit einem Bereich von 0-2097151 ist.Für alle anderen, die auf dieses Problem stoßen und es durch keine der oben genannten Optionen gelöst wird, hat dies für mich funktioniert.
Ich hatte dies deaktiviert, weil wir unsere eigene Authentifizierung verwendeten, aber das führte zu demselben Problem und die akzeptierte Antwort half in keiner Weise.
quelle
Ich habe diesen Fehler mit datatables.net
Ich habe das Ändern des Standard-Ajax behoben. Get to POST in den Eigenschaften der DataTable ()
quelle