AbpExceptionFilter logs canceled HTTP requests as errors
Author: ips-jmCreated Sep 18, 2026Updated Sep 18, 2026
AbpExceptionFilter logs OperationCanceledException as an error even when HttpContext.RequestAborted.IsCancellationRequested is true.
ASP.NET Core already handles this as a client disconnect (499), but ABP intercepts and logs the exception first.
Expected: Skip error logging and error-response wrapping for confirmed client cancellations. Keep logging unrelated cancellations/timeouts.
We used this as a workaround for now:
public sealed class RequestAbortedExceptionFilter : IExceptionFilter, IOrderedFilter
{
// Exception filters run in reverse order; handle client disconnects before ABP logs them.
public int Order => int.MaxValue;
public void OnException(ExceptionContext context)
{
if (context.Exception is not OperationCanceledException ||
!context.HttpContext.RequestAborted.IsCancellationRequested)
{
return;
}
context.ExceptionHandled = true;
context.Result = new EmptyResult();
if (!context.HttpContext.Response.HasStarted)
{
context.HttpContext.Response.StatusCode = StatusCodes.Status499ClientClosedRequest;
}
}
}Source: aspnetboilerplate/aspnetboilerplate