部分休息更新

时间:2017-03-09 15:14:47

标签: asp.net rest asp.net-web-api

假设我有public ActionResult UpdateOrder(Order order)资源和行动REST。 我想制作ChangeOrderStatus(string newStatus, int orderId) api。我想把这个订单推到下一个状态。

为此目的,我在后端有一个名为public ActionResult UpdateOrderStatus(string newStatus, int orderId)的方法,它可以完成有关状态更改的所有内容(发送一些邮件,进行日志记录,将一些内容插入到数据库中等等),并且该方法将从控制器动作。关键是改变订单状态是一项复杂的操作,而不仅仅是用旧的替换旧的归档价值。

但我的问题是我应该为状态更改编写新的控制器操作(路由),例如ChangeOrderStatus并在那里调用UpdateOrder(Order order),或者我应该将所有内容放在UpdateOrder(Order order)方法中?例如,在这种情况下,if (order.Status != oldOrder.Status) { ChangeOrderStatus(order.Status, order.Id); }方法的一部分将是:

UpdateOrder

我会用第一种方法做,但有些人告诉我第二种方法更好,因为资源更新应该有一个入口点,所以我的状态更新或任何其他与订单资源相关的更新应该在PrincipalContext adContext = new PrincipalContext(ContextType.Machine); private async void btnLogin_Click(object sender, RoutedEventArgs e) { try { using (adContext) { if (adContext.ValidateCredentials(txtUsername.Text, txtPassword.Password)) { MainWindow main = new MainWindow(); main.Show(); main.txtLoggedInUser.Text = UserPrincipal.Current.DisplayName; this.Close(); } else { MessageBox.Show("Incorrect Username or Password!"); } } } catch(Exception ex) { var exceptionDialog = new MessageDialog { Message = { Text = ex.ToString() } }; await DialogHost.Show(exceptionDialog, "RootDialog"); } } 方法......所以我不确定什么是正确的方法......

1 个答案:

答案 0 :(得分:0)

如果您只想更新OrderStatus,我会使用像/orders/{id}/status这样的资源。后备控制器应该能够处理所有必要的步骤。您可以更改订单的项目,对于单个订单,这将是/orders/{id}/items/orders/{id}/items/{id}

要更新订单本身,必须/orders/{id}