Usando uma barra invertida (% 5c) em um URL WCF REST

Eu estou construindo um serviço REST no WCF e um dos métodos que estou escrevendo é GetProfile, que retornará o perfil para um determinado nome de usuário. O nome de usuário incluirá o domínio do usuário e, portanto, terá o seguinte formato: "DOMAIN \ username".

Portanto, tenho um serviço chamado Profiles.svc, que possui o seguinte endpoint configurado:

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

No entanto, quando tento visitar o serviço em http: //server/profiles.svc/DOMAIN%5cusername (% 5c é o formato url codificado de uma barra invertida) recebo o seguinte erro:

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

Isso ocorre mesmo quando não há código realmente definido na minha implementação do GetProfile, portanto, acredito que o erro está sendo lançado no ponto em que o WCF tenta vincular o URI a um método.

Há algumas configurações que preciso adicionar à minha configuração de serviço da Web para permitir que barras invertidas sejam adicionadas a URLs em um serviço REST WCF? Ou as barras invertidas simplesmente não são permitidas?

1

1 Respostas

Eu suspeito que eles simplesmente não são permitidos nessa parte da URL. Eles estão bem na string de consulta, desde que sejam codificados. Como regra geral, eu não colocaria nada na parte do caminho da url inválida no nome do arquivo (ou seja,?).

Talvez você possa usar um caractere diferente para deliminar o domínio do nome de usuário.

Você também pode separar o nome de usuário em nome de domínio e nome de usuário e usar o deliminador de caminho normal '/'. Eu não estou familiarizado com isso o suficiente para saber se é assim que você faz isso com certeza, mas este seria o meu melhor palpite.

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
5
adicionado
Solução agradável. nós tivemos que omitir o/de fora também url REST.
adicionado o autor Muhammedh, fonte
Este parece ser o caminho certo para fazê-lo (/ {domainName}/{userName}) como domínio e nome têm uma relação hierárquica que é bem expressa com REST.
adicionado o autor James Bender, fonte