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:

cs
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