异常处理和异步异常处理之间的差异

时间:2018-04-24 10:30:47

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

我创建了一个Web API应用程序,并且不了解我的全局异常处理的工作原理。以下代码不起作用:

public void Handle(ExceptionHandlerContext context){
    if (context.Exception is ObjectNotFoundException)
    {
        var result = new HttpResponseMessage(HttpStatusCode.NotFound)
        {
            Content = new StringContent(context.Exception.Message),
            ReasonPhrase = "Nothing here for you"
        };

        context.Result = new ObjectNotFoundException(context.Request, result);
    }
}

但这很好用:

 public override void Handle(ExceptionHandlerContext context){
    if (context.Exception is ObjectNotFoundException)
    {
        var result = new HttpResponseMessage(HttpStatusCode.NotFound)
        {
            Content = new StringContent(context.Exception.Message),
            ReasonPhrase = "Nothing here for you"
        };

        context.Result = new ObjectNotFoundException(context.Request, result);
    }
}

1 个答案:

答案 0 :(得分:3)

在您的代码中,唯一的区别是覆盖关键字。因此,这就是问题的根源。

由于 Handles 方法需要从基本抽象类ExceptionHandler中重写,因此需要使用override关键字。

如果没有覆盖,您将创建一个新的实现并删除那里的基本实现。因此,方法调用从管道中删除,相当于没有这样的方法存在。

如果你想进行异步处理,你需要使用" HandleAsync"方法而不是"处理" .. https://msdn.microsoft.com/en-us/library/system.web.http.exceptionhandling.exceptionhandler.handleasync(v=vs.118).aspx

任何异步处理程序都只是启用非阻塞执行。因此,如果您的日志记录/处理需要很长时间,或者由于管道中的请求过多而导致预期的负载,请使用异步。