Использование обратной косой черты (% 5c) в URL-адресе REST WCF

Я создаю службу REST в WCF, и одним из методов, которые я пишу, является GetProfile, который вернет профиль для данного имени пользователя. Имя пользователя будет включать домен пользователя и, следовательно, будет иметь следующий формат: «DOMAIN \ username».

Поэтому у меня есть сервис под названием Profiles.svc, который имеет следующую настройку конечной точки:

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

Однако, когда я пытаюсь посетить службу на http: //server/profiles.svc/DOMAIN%5cusername (% 5c - это urlencoded форма обратной косой черты). Я получаю следующую ошибку:

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

Это происходит даже тогда, когда в моей реализации GetProfile не существует кода, который действительно определен, поэтому я считаю, что ошибка возникает в точке, когда WCF пытается связать URI с методом.

Есть ли какие-то настройки, которые мне нужно добавить в конфигурацию веб-сервисов, чтобы позволить обратную косую черту добавлять URL-адреса в службе REST WCF? Или обратная косая черта просто не разрешена?

1

1 ответы

Я подозреваю, что они просто не разрешены в этой части URL-адреса. Они в порядке в строке запроса, если они закодированы. Как правило, я не помещал бы что-либо в часть пути URL-адреса, которая недействительна в имени файла (т. Е.?).

Возможно, вы могли бы использовать другой символ для разграничения домена из имени пользователя.

Вы также можете отделить имя пользователя от имени домена и имени пользователя и использовать разделитель нормального пути '/'. Я не знаком с этим достаточно, чтобы знать, так ли это, как вы это делаете, но это было бы моим лучшим предположением.

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
5
добавлено
Хорошее решение. мы также должны были пропустить/из REST-url.
добавлено автор Muhammedh, источник
Кажется, это правильный способ сделать это (/ {domainName}/{имя_пользователя}), поскольку домен и имя имеют иерархическое отношение, которое хорошо выражено с помощью REST.
добавлено автор James Bender, источник