Domanda

Sto creando un servizio REST su WCF e uno dei metodi che sto scrivendo è GetProfile, che restituirà il profilo per un determinato nome utente. Il nome utente includerà il dominio dell'utente e quindi avrà il seguente formato: " DOMAIN \ nomeutente " ;.

Ho quindi un servizio chiamato Profiles.svc, che ha il seguente endpoint impostato:

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

Tuttavia, quando provo a visitare il servizio all'indirizzo http: //server/profiles.svc/DOMAIN % 5cusername (% 5c è la forma codificata di una barra rovesciata) Ottengo il seguente errore:

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

Ciò si verifica anche quando non esiste alcun codice effettivamente definito nella mia implementazione di GetProfile, quindi credo che l'errore sia stato gettato nel punto in cui WCF tenta di associare l'URI a un metodo.

Esistono alcune impostazioni che devo aggiungere alla configurazione del mio servizio Web per consentire l'aggiunta di barre rovesciate agli URL in un servizio REST WCF? O le barre rovesciate non sono semplicemente consentite?

È stato utile?

Soluzione

Sospetto che semplicemente non siano ammessi in quella parte dell'URL. Stanno bene nella stringa di query fintanto che sono codificati. Come regola generale, non inserisco nulla nella parte del percorso dell'URL che non è valida nel nome file (ovvero?).

Forse potresti usare un carattere diverso per eliminare il dominio dal nome utente.

Puoi anche separare lo username in domainname e username e usare il normale delimitatore di percorso '/'. Non ho familiarità con questo abbastanza per sapere se è così che lo fai di sicuro, ma questa sarebbe la mia ipotesi migliore.

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top