2016-11-05 3 views
-1

Я построения приложения Web API ASP.Net и у меня есть следующий код ...ASP.Net Web API Действие Результат

public IHttpActionResult GetCustomers() {    
    var customers = context.Customers.ToList(); 
    return Ok(customers); 
} 

Я использую метод Ok() для возврата клиентов, потому что Я использую тип возврата IHttpActionResult.

Теперь, если я следующий метод

public void DeleteCustomer(int id) { 
    var customerInDb = context.Customers.SingleOrDefault(c => c.Id == id); 

    if (customerInDb == null) { 
     NotFound(); 
    } 

    context.Customers.Remove(customerInDb); 
    context.SaveChanges(); 
} 

Могу ли я использовать метод NotFound() здесь, когда тип возврата моего ActionMethod недействительна ???

+0

Должны ли мы догадываться, что делает ваш метод NotFound? предоставить больше кода, если вы ожидаете помощи –

+0

NotFound() - это встроенный метод ASP.Net Web API –

+0

Не лучше ли проверять это в контроллере и вызывать удаление только в том случае, если идентификатор действителен? Таким образом, вы можете добавить простой Modelerror и сделать с ним. – Marco

ответ

0

Void не имеет тип возврата. Поэтому вы можете попытаться позвонить , но я не уверен, что это даже скомпилирует - не пробовал. Почему бы вам просто не пойти с коробкой IHttpActionResult?

public IHttpActionResult DeleteCustomer(int id) 
{ 
    var customerInDb = context.Customers.SingleOrDefault(c => c.Id == id); 
    if (customerInDb == null) 
    { 
     return NotFound(); 
    } 

    context.Customers.Remove(customerInDb); 
    context.SaveChanges(); 

    return Ok(customerInDb); 
} 

Использование IHttpActionResult является более элегантной версии. Если идентификатор недействителен, вы можете просто выйти из своего метода и сообщить вызывающему клиенту, что что-то пошло не так. Если все будет хорошо, вы просто дадите клиенту большие пальцы. ЕСЛИ вы вернете свой удаленный объект или просто пустой Ok() не должен иметь значения на данный момент.

Использование void может или не может удалить объект в вашем хранилище данных. Клиент никогда не узнает, потому что сервер не вернет никакого ответа.

+0

Если я просто перейду с помощью IHttpActionResult для удаления и вернусь Ok(), это сработает ... но я хочу знать, что является общепринятым соглашением ... из того, что я прочитал. Удалять методы СЛЕДУЕТ (не HAVE TO) return void –

+0

Я никогда не слышал о таком соглашении. Почему не реагирует лучше, чем рассказывать клиенту, каков результат? – Marco

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