В WCF Web API Preview 5 я имею дело со странным поведением. Вот сценарий:
Это моя модель:
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
}
Это API:
[ServiceContract]
public class PersonApi {
[WebGet(UriTemplate = "person?id={ID}&name={Name}&surname={Surname}&age={Age}")]
public Person Get(Person person) {
return person;
}
}
Я зарегистрировал API со следующим кодом:
RouteTable.Routes.MapServiceRoute<ADummy.PersonApi>("Dummy");
Когда я запускаю попытку связаться со службой по следующему URL, я получаю эту ошибку:
локальный: 36973 / Dummy / человек ID = 1 & имя = Tugberk & фамилия = Ugurlu и возраст = 24
Сервисная операция 'Get' никогда не получит значение для ввода
параметр «персона» типа «персона». Убедитесь, что запрос
HttpOperationHandler имеет выходной параметр с типом, присваиваемым
'Лицо'.
Но когда я меняю свою логику API, как показано ниже, она работает:
[ServiceContract]
public class PersonApi {
[WebGet(UriTemplate = "person?id={ID}&name={Name}&surname={Surname}&age={Age}")]
public Person Get(int ID, string Name, string Surname, int Age) {
var p = new Person {
ID = ID,
Name = Name,
Surname = Surname,
Age = Age
};
return p;
}
}
В веб-API WCF, я полагаю, что вещи не работают, как они работают в ASP.NET MVC.
Что такое способ привязки модели к объекту в WCF Web API?
UPDATE
Я добавил другой метод:
[WebInvoke(UriTemplate= "put", Method="POST")]
public Person Put(Person person) {
return person;
}
Когда я вызываю этот метод со следующими деталями:
Метод: POST
URL: http://localhost:36973/Dummy/put
Примите: / Тип содержимого: текст / xml
Content-Length: 189
BODY:
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>1</ID>
<Name>Tugberk</Name>
<Surname>Ugurlu</Surname>
<Age>25</Age>
</Person>
Я получаю то, что мне нужно. Итак, привязка строки запроса к пользовательским объектам не разрешена?