Abbrechen-Anforderung-Validierung mit HttpHandler auf IIS 7
Ich habe eine Anwendung, die zu tun hat mit einem "speziellen" Zeichen in der URL (wie &, +, %, etc). Wenn ich das senden einer Anfrage an die Anwendung unter Verwendung dieser Zeichen (natürlich schicke ich Ihnen entkommen) ich bin immer "Bad Request" response-code "mit der Meldung" ASP.NET erkennt ungültige Zeichen in der URL". Ablaufverfolgung der Anforderung mir gezeigt, dass der Fehler geworfen wurde aus dem "Authentication Module".
Habe ich ein wenig gesucht und festgestellt, dass jede Seite hat eine ValidateRequest und ändern dessen Wert auf false löst das problem. Leider bin ich mit Httphandler. Wer weiß, wie zu stoppen die Validierung Anforderung mit http-handler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in das gleiche problem (erstellen einer IHttpHandler, die benötigt werden, um Anfragen mit Sonderzeichen in der URL). Ich musste zwei Dinge tun, um es zu beheben:
Erstellen Sie die folgenden DWORD-Registrierung-Eintrag mit dem Wert 1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\VerificationCompatibility
Im web.config, setzen Sie die allowDoubleEscaping-Attribut für das requestFiltering-element auf true.
Ich hatte das gleiche problem und habe es funktioniert durch die Einstellung validateRequest="false" sowie requestValidationMode="2.0", wie unten. Keine registry-änderungen.
Großhandel änderungen an der Anwendung oder Maschine, die level waren für mich nicht akzeptabel. Ich hatte nur ein parameter, die ein client senden war falsch, dass ich brauchte, um zu schrubben.
Fand ich, dass wenn eine Anfrage gestellt wird, die mit html oder andere potenziell gefährliche Gegenstände in der Abfrage-string, können Sie schrubben Sie die Zeichenfolge mithilfe der
context.Request.RawUrl
und, sobald der query-string ist geschrubbt, verwendencontext.RewritePath(scrubbedUrl)
.context.Request.RawUrl
context.RewritePath(srubbedUrl)
Wie es scheint, Anforderung-überprüfung kümmert sich nur um den Zugriff auf
context.Request.Params[]
, so dass, wenn Sie schrubben und rewrite Pfad (in den gleichen Pfad), bevor Sie die Params-Sammlung zugegriffen wird, Sie sind golden.Unterhalb Lösung war für mich-
Erstellen Sie die folgenden DWORD-Registrierung-Eintrag mit dem Wert 1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\VerificationCompatibility
In der
web.config
, legen Sie dieallowDoubleEscaping
Attribut desrequestFiltering
elementtrue
.Können Sie entfernen alle Module mit
um die Anfrage an Ihren handler. Oder vielleicht können Sie entfernen Sie die einzelnen Module sind anhalten Ihre Anfrage.
Dies ist die Liste der Module, die standardmäßig geladen, in ASP.NET 2.0 von hier
Wie über dieses?
Da .NET Framework 4.5, Sie können die
Ungeprüften
Eigenschaft aufHttpRequest
oderHttpRequestBase
zu access-Formular, Abfrage-string und URL-Daten in einer Weise, die nicht auslösen, anforderungsvalidierung. Wenn Sie vermeiden, den Zugriff auf diese Werte in irgendeiner anderen Weise (auch in Helfer-Methoden oder andere HTTP-Module in die selbe Anfrage), Sie wird nicht verlangen, etwas anderes zu vermeiden, anforderungsvalidierung.Können Sie festlegen, validateRequest auf false in der Seiten-Abschnitt der web.config. Vielleicht funktioniert für HttpHandlers-wie auch?