2016-02-21 10 views
0

У меня есть контроллер WebAPI POST, как показано ниже:Манипулирование WebAPI POST

[ResponseType(typeof(Product))] 
    public async Task<IHttpActionResult> PostProduct(Product product) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     db.Products.Add(product); 
     await db.SaveChangesAsync(); 

     return CreatedAtRoute("DefaultApi", new { id = product.Id }, product); 
    } 

Чтобы быть действительным, он ожидает несколько значений, позволяет сказать, что имя, Цена, URL, ManufactureID, StatusID.

Однако POST не всегда будет содержать значение для StatusID, например, и, следовательно, вышеуказанное не будет выполнено, так как я не могу иметь значение null. Но когда значение не отправляется POST, я хочу «перехватить» и установить значение в коде. Пусть скажем, int 1.

Как я могу это сделать?

Я использую DTO для получения дополнительных данных из API, с хорошим и удобным для просмотра способом. Можно ли использовать DToes в POST? Если да, то как? Или какой-либо другой подход к настройке данных, если он не активирует POST?

ответ

0

Я бы сказал, создайте свою модель запроса продукта, которая будет определена в ваших моделях WebAPI, и там вы сможете определить свой StatusID как нулевой. После вашего запроса на получение вы можете сопоставить свои данные запроса продукта с ProductDto, и в этом сопоставлении вы установили свои значения по умолчанию, если они вам понадобятся.

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

0

Вы должны создать класс продукта POST, который является агностиком сохранения. Не используйте сгенерированный класс продукта вашего ORM. Используя приведенный выше пример, вы должны иметь класс ProductModel, который будет содержать только те свойства, которые клиент API может обновить. Затем сделайте сопоставление DTO с моделью данных вашего продукта.

public async Task<IHttpActionResult> PostProduct(ProductModel model) 
{ 
    ... 
    var product = db.Products.New(); 
    //mapping here 
    product.Name = model.Name; 
    product.Price = model.Price; 
} 
Смежные вопросы