Search code examples
asp.net-core.net-coreexceptionhandler

app.UseExceptionHandler not firing in .NET Core 3.1 when I throw new exception


I am attempting to write a global exception handler to log trace information. I've modified my startup.cs Configure method and purposely did not exclude it from IsDevelopment so I could confirm it worked.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseExceptionHandler(errorApp =>
        {
            errorApp.Run(async context =>
            {
                var ex = context.Features.Get<IExceptionHandlerFeature>();
                if (ex != null)
                {
                    var errorMessage = $"Error: {ex.Error.Message}";
                    _logger.LogError(errorMessage, ex);
                    await context.Response.WriteAsync(errorMessage).ConfigureAwait(false);
                }
            });
        });

    app.UseRequestTracking();

    app.UseDeveloperExceptionPage();

    app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseMvc();
}

Then from a controller, I added a throw new exception to see the handler get hit, but it does not.

    [HttpGet]
    [Route("api/{productTenantId}/picklists")]
    public Task<List<PicklistSummary>> GetPicklists([FromUri] Guid productTenantId)
    {
        throw new Exception("testing");
        return _picklistService.GetPicklists(productTenantId);
    }

Any suggestions?


Solution

  • Try to remove app.UseDeveloperExceptionPage();before the app.UseExceptionHandler like below:

    app.UseDeveloperExceptionPage();
    app.UseExceptionHandler(errorApp =>
            {
                errorApp.Run(async context =>
                {
                    var ex = context.Features.Get<IExceptionHandlerFeature>();
                    if (ex != null)
                    {
                        var errorMessage = $"Error: {ex.Error.Message}";
                        _logger.LogError(errorMessage, ex);
                        await context.Response.WriteAsync(errorMessage).ConfigureAwait(false);
                    }
                });
            });
    

    result:

    enter image description here