我在一个解决方案中有两个项目。第一个是图书馆项目,第二个是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());
。