假设我有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");
}
}
方法......所以我不确定什么是正确的方法......
答案 0 :(得分:0)
如果您只想更新OrderStatus
,我会使用像/orders/{id}/status
这样的资源。后备控制器应该能够处理所有必要的步骤。您可以更改订单的项目,对于单个订单,这将是/orders/{id}/items
或/orders/{id}/items/{id}
。
要更新订单本身,必须/orders/{id}
。