Ich erhalte den eher selbsterklärenden Fehler:
Ein potenziell gefährlicher Request.Path-Wert wurde vom Client erkannt (*).
Das Problem ist auf *
die Anforderungs-URL zurückzuführen:
https://stackoverflow.com/Search/test*/0/1/10/1
Diese URL wird verwendet, um eine Suchseite zu füllen, auf der 'test *' der Suchbegriff ist und der Rest der URL sich auf verschiedene andere Filter bezieht.
Gibt es eine einfache Möglichkeit, diese Sonderzeichen in der URL zuzulassen? Ich habe versucht, das zu ändern web.config
, ohne Erfolg.
Soll ich die Sonderzeichen manuell codieren / decodieren? Oder gibt es dafür eine bewährte Methode? Ich möchte die Verwendung von Abfragezeichenfolgen vermeiden. - aber es kann eine Option sein.
Die Anwendung selbst ist eine c# asp.net
Webforms-Anwendung, die Routing verwendet, um die oben genannte nette URL zu erstellen.
ValidateRequest=false
oben?Antworten:
Das
*
Zeichen ist im Pfad der URL nicht zulässig, es gibt jedoch kein Problem bei der Verwendung in der Abfragezeichenfolge:Es handelt sich nicht um ein Codierungsproblem. Das
*
Zeichen hat in einer URL keine besondere Bedeutung. Es spielt also keine Rolle, ob Sie es per URL codieren oder nicht. Sie müssten es mit einem anderen Schema codieren und dann dekodieren.Beispiel: Verwenden eines beliebigen Zeichens als Escapezeichen:
Und Dekodierung:
quelle
PATH
und nicht im Querystring zu verwenden.aa
<=>a
undab
<=> nicht*
als einfacheres Codierungsschema verwenden?Wenn Sie .NET 4.0 verwenden, sollten Sie diese URLs über die web.config zulassen können
Hinweis: Ich habe gerade das Sternchen (*) entfernt. Die ursprüngliche Standardzeichenfolge lautet:
Weitere Informationen finden Sie in dieser Frage .
quelle
Für mich arbeite ich an .net 4.5.2 mit Web-API 2.0. Ich habe den gleichen Fehler. Ich habe ihn nur durch Hinzufügen von requestPathInvalidCharacters = "" in den requestPathInvalidCharacters festgelegt. Sie müssen nicht zulässige Zeichen festlegen. Andernfalls müssen Sie Zeichen entfernen, die dieses Problem verursachen.
** Beachten Sie, dass dies keine gute Vorgehensweise ist. Möglicherweise handelt es sich um einen Beitrag mit diesem Parameter, da das Attribut eines Objekts besser ist, oder versuchen Sie, das Sonderzeichen zu codieren. - Nachdem ich nach Best Practices für das Entwerfen von Rest-APIs gesucht hatte, stellte ich fest, dass wir bei der Suche, Sortierung und Paginnierung den Abfrageparameter wie folgt behandeln müssen
und dies löst das Problem, wenn wir & in der URL um% 26 codieren und auf irgendeine Weise ersetzen. Auf dem Server erhalten wir den korrekten Parameter Digital & Mckinsey
Dieser Link kann bei bewährten Methoden zum Entwerfen von Rest-Web-APIs hilfreich sein. https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
quelle
Sie sollten den Routenwert codieren und dann (falls erforderlich) den Wert dekodieren, bevor Sie suchen.
quelle
Bei der Verwendung der URL hat ein Benutzer versehentlich ein / anstelle eines? um die Abfrageparameter zu starten
z.B:
was hätte sein sollen:
quelle
Diese Ausnahme trat in meiner Bewerbung auf und war eher irreführend.
Es wurde ausgelöst, als ich eine ASPX-Seiten-Webmethode mit einem Ajax-Methodenaufruf aufrief und ein JSON-Array-Objekt übergab. Die Signatur der Webseitenmethode enthielt ein Array eines stark typisierten .NET-Objekts, OrderDetails. Die Actual_Qty-Eigenschaft wurde als int definiert, und die Actual_Qty-Eigenschaft des JSON-Objekts enthielt "4" (zusätzliches Leerzeichen). Nach dem Entfernen des zusätzlichen Speicherplatzes wurde die Konvertierung ermöglicht, die Webseitenmethode wurde durch den Ajax-Aufruf erfolgreich erreicht.
quelle
Versuchen Sie, den Server des Webprojekts als lokalen IIS festzulegen, wenn es sich um IIS Express handelt. Stellen Sie sicher, dass die Projekt-URL richtig ist, und erstellen Sie ein virales Verzeichnis.
quelle
Beim Umgang mit URLs (Uniform Resource Locator) gibt es bestimmte Syntaxstandards . In dieser speziellen Situation handelt es sich um reservierte Zeichen .
Wie bis RFC 3986 können reservierte Zeichen durch die generische Syntax, durch jede schemaspezifische Syntax oder durch die implementierungsspezifische Syntax des Dereferenzierungsalgorithmus eines URI als Begrenzer definiert werden (oder auch nicht). Und das Sternchen (*) ist ein reserviertes Zeichen.
Die beste Vorgehensweise ist die Verwendung nicht reservierter Zeichen in URLs zu verwenden, oder Sie können versuchen, sie zu codieren.
Grabe weiter:
quelle
%25
anstelle von%
, sodass IIS diesen Fehler möglicherweise für eine perfekt gültige URL zurückgibt.