在MVC应用程序中将删除操作从Web移动到服务层 - 应该返回什么?

时间:2013-02-20 02:52:50

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我的服务层中有以下方法:

public void DeleteOrder(int orderId)
        {
            var order = _db.Order.FirstOrDefault(c => c.OrderId == orderId);
            if (order == null)
            {
                // error handling
            }

            _db.Orders.Remove(order);
            _db.SaveChanges();
        }

在向控制器返回内容方面,最佳做法是什么?目前Remove()操作只是调用它并重定向用户。

2 个答案:

答案 0 :(得分:1)

这取决于服务。

如果服务层是肥皂服务,您应该将错误视为错误并指定错误合同。

http://msdn.microsoft.com/en-us/library/ms733721.aspx

如果您正在使用RESTFul服务,我总是返回一个Error对象,指示服务操作是否成功。

Class ErrorObject {

Bool IsOk

String ErrorMessage

String Trace

}  

答案 1 :(得分:0)

这取决于您将与哪种客户进行互动。由于您正在重定向客户端,听起来您现在不支持AJAX客户端。

在这种情况下,约定(由Ruby on Rails启动)是在成功结果后重定向,否则显示与操作对应的页面,并显示错误。但请记住,大多数使用现代Web应用程序的人都希望使用javascript和异步请求(AJAX)。在这种情况下,您可能希望返回记录良好的JSON,它是以下两种类型之一:

{"error": {"code": ..., "fields": {"field1": "error message", "field2": "error message 2"}}

或其他一些没有设置“错误”的JSON,如果成功的话。然后,各种类型的客户都可以访问您的Web服务,包括JSONP或带有CORS的XHR等技术。