Могу ли я использовать объект в UriTemplate? - PullRequest
5 голосов
/ 18 сентября 2010

Я попробовал следующий код:

 [OperationContract]
 [WebInvoke(UriTemplate="/Users/Register/{user}")]
 void Register(User user);

Но когда я пытаюсь запустить это, он говорит мне, что UriTemplate должен содержать только строки.Что делать, если мне нужно передать объект в мой метод, как в этом случае, объект User в мой метод Register.

Если я изменю атрибут WebInvoke на:

[WebInvoke(UriTemplate="/Users/Register/")]

Обозревательотображает ошибку Method not allow, когда я пытаюсь перейти к http://localhost:8000/Users/Register, например

Ответы [ 3 ]

6 голосов
/ 18 сентября 2010

Вы ограничены строками в UriTemplate.Вы можете использовать несколько параметров для передачи нескольких строк, но вы не можете использовать сложный тип.Если вы хотите передать сложный тип, то он не может быть нигде в URI, а скорее в теле запроса POST / PUT.Запрос GET не принимает тело сообщения.Таким образом, приведенный выше код может быть изменен на:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate="/Users/Register")]
void Register(User user);

Где вы передаете объект User не через Uri, а как часть запроса POST.

0 голосов
/ 18 сентября 2010

Вы не передаете объекты в виде параметров строки запроса (как вы могли бы? Как-нибудь сериализовать это?) Вы должны передать идентификатор пользователя.

0 голосов
/ 18 сентября 2010

Это именно так, как он говорит.URI буквально может содержать только строки.Они не созданы для объектов.Возможно, вы могли бы вместо этого преобразовать его в имя пользователя или идентификатор пользователя, если вам нужно ... но вы никогда не сможете использовать сложный тип объекта в качестве URI.

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