2010-05-14 12 views
6
http://site.com/page%3fcharacter 

Diese URL wird der folgende Fehler zurückgeben enthalten:ASP.NET 4 URL Einschränkungen: warum URL noch keine% 3f Zeichen

Illegal characters in path. 

Ich bin dies bereits in web.config setzen:

<system.web> 
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" /> 
<pages validateRequest="false"> 
... 

Wie kann ich diesen Fehler beheben?

Antwort

23

Wenn Sie die Anforderung durch zulassen möchten verwendet, Sie requestPathInvalidCharacters und legen Sie es hinzufügen müssen auf eine leere Zeichenfolge:

<system.web> 
    <httpRuntime requestPathInvalidCharacters="" /> 
</system.web> 

bearbeiten Sie sollten Ihre ursprüngliche Frage an Ort und Stelle lassen, denn jetzt meine Antwort ist nicht sinnvoll.

Aber in Antwort auf Ihre zweite Frage, dass es, weil% 3f "?" was in Dateinamen unter Windows nicht erlaubt ist. Sie können die relaxedUrlToFileSystemMapping Eigenschaft auf true gesetzt, dieses Verhalten zu ändern:

<system.web> 
    <httpRuntime requestPathInvalidCharacters="" 
       relaxedUrlToFileSystemMapping="true" /> 
</system.web> 

Sie könnten durch alle Eigenschaften in der HttpRuntimeSection Klasse aussehen wollen, um zu sehen, ob es irgendwelche anderen ist, die zutreffen könnten.

Sie können auch eine Unterklasse von RequestValidator implementieren und richten Sie Ihre web.config für die Verwendung Ihrer Unterklasse ein (die vermutlich alle URLs durchlässt?). Persönlich würde ich nicht stören und lassen Sie einfach die eingebauten Klassen damit umgehen. Es ist unwahrscheinlich, dass ein normaler Benutzer alle zu versehentlich in "% 3f" in einem Pfad eingibt, und warum die Mühe so gehen, um den Anwendungsfall für böswillige Benutzer zu verbessern?

Dies ist übrigens ein neues Feature in ASP.NET 4, weshalb Stack Overflow keinen Fehler ausspuckt: es läuft auf .NET 3.5.

+0

Das löste das Problem. aber ich bekomme einen weiteren Fehler für eine andere URL. Ich werde die Frage bearbeiten. – stacker

+0

1. Schreiben Sie den Pfad neu. 2. eine leere Seite (oder benutzerdefinierte Fehlerseite) zurückgeben. 3. Umleitung zur Startseite. Ich möchte die Möglichkeit haben zu entscheiden, wie ich auf diese Art von Fehlern reagieren soll. – stacker

+0

Kann ich Integrationstests dafür haben? http://stackoverflow.com/questions/2831075/integrationtests-a-potentially-dangerous-request-path-value-was-detected-from-t – stacker

1

Wahrscheinlich, weil das viel wie eine fehlerhafte URL aussieht.

& wird als Trennzeichen für die Query-String-Parameter, dh site.com/page?some=20 & andere = 15

+0

Das ist richtig. aber stellen Sie sich vor, dass jemand eine URL wie diese auf Ihrer Website veröffentlicht und der Benutzer einen Fehler wie diesen sieht ... das verwirrend! – stacker