WCF Web API - привязка модели к объекту (убедитесь, что у запроса HttpOperationHandler есть выходной параметр с типом, назначаемым для ...) - PullRequest
0 голосов
/ 23 ноября 2011

В 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>

Я получаю то, что мне нужно. Итак, привязка строки запроса к пользовательским объектам не разрешена?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

В последней версии ASP.NET Web API (выпущено с ASP.NET MVC 4 Beta) поддерживается привязка модели.

Привязка и проверка модели. Привязки модели обеспечивают простой способ извлечения данных из различных частей HTTP-запроса и преобразования этих частей сообщения в объекты .NET, которые могут использоваться действиями веб-API.

В предыдущих версиях ASP.NET Web API требуемые функциональные возможности могут быть реализованы с помощью HttpOperationHandler и в методе OnHandle возвращают модель. Может быть, Проверка свойств модели WCF Web APi , вопрос и ответы могут быть использованы для вдохновения.

0 голосов
/ 23 ноября 2011

Исходя из вашего опыта, кажется, что при проектировании поведение Get () будет связывать только те параметры, которые определены в вашем UriTemplate.С точки зрения цели и безопасности это правильное поведение.

...