在哪里使用异常处理

时间:2019-01-09 10:34:35

标签: c# asp.net-mvc exception-handling

我有一个使用支付服务类的MVC控制器。我应该在哪里进行异常处理?什么是最佳做法?

我在控制器类和服务类中都使用try / catch块吗? 异常是否再次在服务类中抛出,以便可以在控制器中处理?还是应该在控制器中完成所有异常处理? 我可以捕获Stripe特定的异常,应该在服务类或控制器中完成吗?困惑...

public async Task<IActionResult> DoSomething(MyViewModel model)
{    
    try
    {
        await _paymentService.UpdateSomethingAsync(id, token);
    }
    catch (Exception ex)
    {
        //handle
    }
    enter code here    
}

public class PaymentService : IPaymentService
{   
    public async Task UpdateSomethingAsync(string id, string token)
    {
        try
        {
            //update using Stripe...
        }
        catch (Exception ex)
        {
            //TODO: Implement error handling
            throw;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我猜想异常处理必须在服务级别,因为它应该能够捕获和处理在服务级别发生的所有异常(也可以将其记录在服务级别以供以后分析),并将其以原始形式抛出(或根据需要可以在服务水平上对其进行定制)。

接收器(在这种情况下为控制器)应该具有自己的错误处理机制,因为它是应用程序的另一层,并且可能需要对异常进行某些操作或在UI级别进行日志记录。在这里,请注意,如果不需要操纵或记录异常或错误,则可以直接显示服务级别异常并从控制器中删除捕获。

希望有道理。

答案 1 :(得分:0)

只需在catch {}中编写与try {}中相同的代码,因为catch永远不会传回或返回值。

   try
        {
            cust_id = txtID.Text;
            submit changes();
            lblmessage.Text = "Data Save";
        }
        catch (Exception ex)
        {
              lblmessage.Text = "Saving error";
              cust_id = txtID.Text;
              submit changes();

        }