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

StackOverflow https://stackoverflow.com/questions/201838

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top