我有一个包含三层的Web应用程序:Web>服务>核心。 Services有一堆业务逻辑,可以帮助Web构建和解释viewModels。有时,服务层可能存在问题,应将用户推送到错误页面。
如何在MVC应用程序的服务层中实现错误处理?例如:
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();
}
那会是什么?是否阻止?
答案 0 :(得分:3)
通常,您会将异常处理代码放在控制器中。在您的术语中,我假设MVC控制器存在于您的“Web”层中,并且这些控制器调用“服务”层中的方法,例如您显示的“DeleteOrder”方法。如果是这种情况,在DeleteOrder中的错误处理代码中,您应该只抛出一个异常:
if (order == null)
{
throw new InvalidOperationException("Specified OrderId does not exist");
}
这样,未处理的异常将传递给您的异常处理代码所在的控制器,在那里您可以记录异常并将用户重定向到相应的错误页面。
至于如何在控制器中处理异常,您有许多选择:
第四种方法(创建自己的异常过滤器)可能是最强大的方法。在这里,您可以添加异常日志记录,以及根据抛出的异常类型将用户重定向到适当的错误页面的代码。
您可以很好地了解MVC控制器异常处理here。
答案 1 :(得分:1)
抛出用户友好的异常是要走的路。您的控制器应该尝试/捕获调用您的服务层的代码,并通过将用户重定向到适当的错误页面来采取相应的行动。
在您显示的具体示例中,OrderNotFoundException没问题。
答案 2 :(得分:0)
如果服务层是在WCF上构建的,那么使用Fault Contract来传达错误/异常信息。