异常处理程序不捕获异常

时间:2018-11-12 19:25:35

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

我在一个解决方案中有两个项目。第一个是图书馆项目,第二个是Asp.Net WebApi项目。两者都使用.Net Framework 4.6.1。 我想制作一些可以全局处理异常的类。我发现了使用ExceptionHandler的不错的解决方案,但是它没有按预期工作。我正在关注这篇文章https://docs.microsoft.com/pl-pl/aspnet/web-api/overview/error-handling/web-api-global-error-handling。 这是我处理异常的课程。

public class GlobalExceptionHandler : ExceptionHandler
{
    public override void HandleCore(ExceptionHandlerContext context)
    {
        context.Result = new TextPlainErrorResult
        {
            Request = context.ExceptionContext.Request,
            Content = context.Exception.Message
        };
    }

    private class TextPlainErrorResult : IHttpActionResult
    {
        public HttpRequestMessage Request { get; set; }

        public string Content { get; set; }

        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            HttpResponseMessage response =
                             new HttpResponseMessage(HttpStatusCode.InternalServerError);
            response.Content = new StringContent(Content);
            response.RequestMessage = Request;
            return Task.FromResult(response);
        }
    }
}

例如,我的图书馆项目中有此代码。

 public class ThrowSomething
{
   public void ThrowSomeException()
   {
      throw new Exception("Custom exception");
   }
}

在Asp.Net的控制器中,我有

public IHttpActionResult SomeAction()
    {
        var throwSomething = new ThrowSomething();
        throwSomething.ThrowSomeException();
        return Ok();
    }

我想在我的GlobalExceptionHandler类中捕获异常并将一些结果返回给Api。当前,GlobalExceptionHandler不在处理异常。

我在WebApiConfig的Register方法中也有config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());

0 个答案:

没有答案