Verwenden eines umgekehrten Schrägstrichs (% 5c) in einer REST-WCF-URL

Ich erstelle einen REST-Dienst in WCF, und eine der Methoden, die ich schreibe, ist GetProfile, die das Profil für einen bestimmten Benutzernamen zurückgibt. Der Benutzername enthält die Domäne des Benutzers und hat das folgende Format: "DOMÄNE \ Benutzername".

Ich habe daher einen Dienst namens Profiles.svc, der den folgenden Endpunkt eingerichtet hat:

[OperationContract]
[WebGet(UriTemplate = "/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String username);

Wenn ich jedoch versuche, den Dienst unter http: //server/profiles.svc/DOMAIN%5cusername (% 5c ist die urlencodierte Form eines Backslash) Ich erhalte den folgenden Fehler:

Server error in '/' Application
HTTP Error 400 - Bad Request

Dies tritt auch dann auf, wenn in meiner Implementierung von GetProfile kein Code definiert ist. Daher glaube ich, dass der Fehler an dem Punkt ausgelöst wird, an dem WCF versucht, den URI an eine Methode zu binden.

Gibt es einige Einstellungen, die ich meiner Web-Service-Konfiguration hinzufügen muss, damit Backslashes zu URLs in einem REST WCF-Dienst hinzugefügt werden können? Oder sind Backslashes einfach nicht erlaubt?

1

1 Antworten

Ich vermute, dass sie in diesem Teil der URL einfach nicht erlaubt sind. Sie sind in der Abfrage-Zeichenfolge in Ordnung, solange sie codiert sind. Als allgemeine Regel würde ich nichts in den Pfadteil der URL einfügen, der im Dateinamen ungültig ist (d. H.?).

Vielleicht könnten Sie ein anderes Zeichen verwenden, um die Domäne vom Benutzernamen zu trennen.

Sie können den Benutzernamen auch in Domainname und Benutzernamen trennen und den normalen Pfadbegrenzer '/' verwenden. Ich weiß das nicht genug, um zu wissen, ob du das so sicher machst, aber das wäre meine beste Schätzung.

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
5
hinzugefügt
Nette Lösung. wir mussten auch die/aus REST-URL auslassen.
hinzugefügt der Autor Muhammedh, Quelle
Dies scheint der richtige Weg zu sein (/ {domainName}/{userName}), da Domain und Name eine hierarchische Beziehung haben, die sich gut mit REST ausdrückt.
hinzugefügt der Autor James Bender, Quelle