如何避免在控制器中使用try ... catch?

Rus*_*ino 4 try-catch asp.net-mvc-3

我尝试在应用程序的较低层处理我的异常,因为它们可以被处理(记录它们).但是,有一些错误会导致应用程序崩溃,就像参数是NULL一样,并且在这种情况下不应该抛出ArgumentNullException.

如果考虑调用服务层的控制器层.我想避免服务层抛出异常,因为我想在这里处理所有这些(日志记录),但我觉得在这种情况下这是不可能的(如NULL情况).

那么避免在控制器中使用try ... catch的最佳方法是什么?或者我应该在控制器中使用try ... catch?

Dar*_*rov 8

我更喜欢在Application_Error方法中处理所有未处理的异常(不应该发生的事情).您可以在此处记录异常,并根据其性质显示正确的错误视图.

自定义模型绑定器,验证器,动作过滤器等​​......也可以允许拦截一些异常情况,以避免在任何地方使用try/catch来污染控制器.

对于我打算处理的所有事情,比如业务错误等......使用try/catch,甚至更好地使用if语句并让服务层通知您某些操作是成功还是失败(TryXXX模式)都没有错.

因此,一如既往,您的问题的答案是:它取决于.这取决于您的应用程序的组织方式,服务层的组织方式,可能发生的错误,您希望明确处理的错误,......许多,很多很多因素,当然还有许多,很多,很多可能的方法.