2015-10-06 2 views
0

У меня есть проект с ASPNET WebAPI 2 и в контроллере у меня есть два действияWebAPI сложный объект возвращается как нуль

public IHttpActionResult Get([FromUri] Company company) 
{ 
    //code 
} 

и другие: класс

[HttpGet] 
[Route("api/company/quantity")] 
public IHttpActionResult Count([FromUri] Company company) 
{ 
     //code 
} 

Компания:

public class Company 
    { 
    public Company() 
    { 
     Name = ""; 
     //Set default value to all properties 
    } 
    public string Name {get;set;} 
    //othger string properties 
    } 

Если у меня есть доступ к первому методу Получить с этим uri: // localhost/api/company/ все идет нормально, а объект Company появляется в экземпляре со значениями по умолчанию.

Но если я пытаюсь получить доступ к второму методу Count с этим URI: // локальной/API/компании/количеством метод ударом, но Company объекта является нулевым.

Неправильно?

+0

Добавить DataContract и DataMember атрибуты Компании класс. – lcryder

ответ

1

Вам необходимо изменить атрибут маршрута для вашего второго метода и поместить компанию в скобки.

[HttpGet] 
[Route("api/{company}/quantity")] 
public IHttpActionResult Count([FromUri] Company company) 
{ 
    //code 
} 

Однако, вы пытаетесь передать сложный объект по URL-адресу? вы можете лучше переключиться на метод POST/PUT и связать объект с телом запроса.

+0

Да, но это не мой собственный проект, просто работающий над ним, не пытаясь изменить его позже. – gog

+0

Компания также является именем контроллера. И проблема в том, что в первом методе (Get (Company Company)) конструктор компании попадает перед действием, поэтому он имеет значения по умолчанию. Но во втором методе (граф (компания компании)) конструктор компании не попал, поэтому объект имеет значение null. В обоих случаях я ничего не пропускаю в URL-адресе. – gog

+0

Мы не должны использовать POST просто потому, что мы пытаемся «передать сложный объект». Следует уважать семантику REST: если мы пытаемся ПОЛУЧИТЬ что-то, мы не должны использовать POST для ее получения. POST подразумевает изменение состояния, GET означает получение информации. – rsenna

0

Вы не можете пройти сложный объект, как класс, используя HttpGet способ отправить это изменить глагол либо пост или положить и отправить объект на один тело запроса HTTP

+0

Да, но почему в первом методе это работает? Его тоже получает глагол. – gog

Смежные вопросы