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

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

Поэтому у меня есть служба 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? Или обратная косая черта просто не разрешена?


person Amit Kothari    schedule 14.10.2008    source источник


Ответы (1)


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

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

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

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