egmfrs
egmfrs

Reputation: 1360

How can I capture 401 errors in asp.net core?

In my startup I have added this code:

            app.UseStatusCodePagesWithReExecute("/Home/Error", "?statusCode={0}");
            app.UseMiddleware<ExceptionHandlingMiddleware>();

In my controller I have added:

    [AllowAnonymous]
    public IActionResult Error(int? statusCode = null)
    {

        return View(new ErrorViewModel { 
                                         RequestId = Activity.Current?.Id ??
                                           HttpContext.TraceIdentifier, 
                                             StatusCode = statusCode
                                        });
    }

And I also have this middleware class for catching 500's:

public class ExceptionHandlingMiddleware
{
    private readonly RequestDelegate _next;

    public ExceptionHandlingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception)
        {
            context.Response.Clear();
            context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
        }
    }
}

I can catch 404's and 500. Everything else comes back as 404 (including 401). If I debug, the statusCode in the Error action is always 404.

How can I get the statusCode to reflect the reality (i.e. 401)?

Upvotes: 4

Views: 3390

Answers (1)

user4851087
user4851087

Reputation:

You can check my code here .It's global handle exception so you can catch 401 exception but I think you need to throw error code in order for global handler exception catch 401 error code

Upvotes: 1

Related Questions