Wie kann ich pass den Schrägstrich und die anderen 'url sensible" - Zeichen, um einen WCF REST service?
Habe ich einen REST WCF service eine Methode bekommt einen parameter als string an. Diese Zeichenfolge enthalten kann, die slash Zeichen"/". Es macht meine Anfrage falsch, da ich denke dass die URL falsch geht.
Wenn es anfordern und bekommen Antwort (WebRequest.GetResponse()) wirft, "Der remote-server ein Fehler zurückgegeben: (400) ungültige Anforderung." Ausnahme.
Meine Anfrage: http://localhost:17679/testmethod/DmC/TCGlOLz1EbEwqAls5Q==\nh2cQzTizSBg=
Ich versuche mit Uri.EscapeDataString, aber es hilft nicht, bekomme ich die gleiche exception wie oben.
Nach dieser Umstellung meine Anfrage sieht wie folgt aus:
http://localhost:17679/testmethod/DmC%2FTCGlOLz1EbEwqAls5Q%3D%3D%0Ah2cQzTizSBg%3D
Wenn ich eine Zeichenfolge übergeben, ohne slash in string funktioniert es wie ich will.
Wie kann ich pass den Schrägstrich und die anderen 'url sensible" - Zeichen, um einen WCF REST service?
Thx.
UPDATE: ich habe es gelöst, können Sie sehen, es in meiner Antwort unten.
- Wieso ist das inakzeptabel? Tut Sie es nicht bekommen, decodiert, der von der WCF? Wenn ja was macht Ihr die Funktion sehen? Wird eine exception geworfen? Hast du includeExceptionDetailInFault wie beschrieben in dieses Dokument.
- Also, die "Der Remoteserver hat einen Fehler zurückgegeben: (400) Bad Request." - exception kommt beim aufrufen von WebRequest die GetResponse-Methode.
- Ihre Frage wurde nicht klar machen, dass die Weitergabe der escaped text auch wieder der 400-Fehler. Bitte Bearbeiten Sie es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich es gelöst.
URI-template ist der Schlüssel.
Wenn ich definieren URI diese Weise, es produziert die Ausnahme oben:
Durch ändern dieser Weg funktioniert es:
Sowieso, Uri.EscapeDataString ist erforderlich!
Versuchen Sie zwingen ein \ vor jedes /. (normalerweise sind es Kräfte, die Metazeichen zu Lesen wie ein normaler Charakter)
Während die akzeptierte Antwort wird in einigen Fällen arbeiten, wo Sie den URI-parameter wird am Ende der URI ist, wird es nicht funktionieren, wenn ein URI-parameter ist in der Mitte von einer URI. Aber mit nur ein paar Konfigurations-Einstellungen können Sie zulassen, dass Ihre Anwendung zu akzeptieren codiert Schrägstriche.
Den
HttpListener
nimmt eingehende Anfragen verwendet eine interneHttpListenerRequestUriBuilder
analysiert die raw-Anfrage-URI.Den
HttpListenerRequestUriBuilder
wird oder nicht unescape die Codierung basiert auf einer Einstellung. Die folgende Einstellung hinzufügen, um Ihreapp.config
Datei:Damit wird die eingehende
Message
'sTo
Kopfzeilen werden korrekt gebaut, ohne unescaping die URIs.Wenn Sie eine version von .NET vor 4.5, ich glaube, Sie müssen auch hinzufügen, eine andere Einstellung, wie er den
System.Uri
- Klasse nicht entgehen Schrägstriche fürhttp
undhttps
Pfade. Diese Einstellung ist wie folgt:Uri.Match
und die Standard -QueryStringConverter
sollte trotzdem funktionieren mit der unescaped text, also eine Methode wie:wird zu einem nicht korrekt codierten string an die
bar
parameter.