Folosind un backslash (% 5c) într-un URL REST WCF

Construiesc un serviciu REST pe WCF și una dintre metodele pe care le scriu este GetProfile, care va returna profilul pentru un nume de utilizator dat. Numele de utilizator va include domeniul utilizatorului și astfel va avea următorul format: "DOMAIN \ username".

Prin urmare, am un serviciu numit Profiles.svc, care are următorul punct stabilit:

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

Cu toate acestea, când încerc să vizitez serviciul la adresa http: //server/profiles.svc/DOMAIN%5quote (% 5c este forma urlcodificată a unei backslash), primesc următoarea eroare:

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

Acest lucru se întâmplă chiar și atunci când nu există niciun cod definit în implementarea mea de GetProfile, așa că cred că eroarea este aruncată la punctul WCF încearcă să legare URI la o metodă.

Există câteva setări pe care trebuie să le adaug în configurația serviciului meu web pentru a permite adăugarea backslash-urilor la adresele URL într-un serviciu REST WCF? Sau nu este permisă întoarcerea înapoi?

1

1 răspunsuri

Bănuiesc că acestea nu sunt pur și simplu permise în acea parte a urlului. Ele sunt bine în șirul de interogare, atâta timp cât acestea sunt codificate. Ca regulă generală, nu aș pune nimic în partea de cale a urlului care este nevalidă în numele fișierului (adică?).

Poate că ați putea folosi un alt personaj pentru a delimita domeniul din numele de utilizator.

Puteți, de asemenea, să separați numele de utilizator în nume de domeniu și nume de utilizator și să utilizați calea normală deliminator '/'. Nu sunt familar cu acest lucru suficient pentru a ști dacă așa procedați cu siguranță, dar asta ar fi cea mai bună estimare a mea.

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
5
adăugat
O soluție plăcută. a trebuit să omitem și urlul REST/out of out.
adăugat autor Muhammedh, sursa
Aceasta pare a fi modalitatea corectă de a face acest lucru (/ {domainName}/{userName}) ca domeniu și nume având o relație ierarhică care este exprimată bine cu REST.
adăugat autor James Bender, sursa