Pregunta

Estoy creando un servicio REST en WCF, y uno de los métodos que estoy escribiendo es GetProfile, que devolverá el perfil de un nombre de usuario determinado. El nombre de usuario incluirá el dominio del usuario, por lo que tendrá el siguiente formato: " DOMINIO \ nombre de usuario " ;.

Por lo tanto, tengo un servicio llamado Profiles.svc, que tiene configurado el siguiente punto final:

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

Sin embargo, cuando intento visitar el servicio en http: //server/profiles.svc/DOMAIN % 5cusername (% 5c es la forma codificada de una barra invertida) Recibo el siguiente error:

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

Esto ocurre incluso cuando no hay un código realmente definido en mi implementación de GetProfile, por lo que creo que el error se produce en el punto en que WCF intenta vincular el URI a un método.

¿Hay algunas configuraciones que necesito agregar a la configuración de mi servicio web para permitir que se agreguen barras invertidas a las URL en un servicio REST WCF? ¿O las barras invertidas simplemente no están permitidas?

¿Fue útil?

Solución

Sospecho que simplemente no están permitidos en esa parte de la URL. Están bien en la cadena de consulta siempre que estén codificados. Como regla general, no pondría nada en la parte de la ruta de la URL que no sea válida en el nombre de archivo (es decir,?).

Quizás podría usar un carácter diferente para delimitar el dominio del nombre de usuario.

También puede separar el nombre de usuario en nombre de dominio y nombre de usuario y usar el delimitador de ruta normal '/'. No estoy familiarizado con esto lo suficiente como para saber si así es como lo haces con seguridad, pero esta sería mi mejor suposición.

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top