.NET Core redirect to custom error pages from Startup.cs

Viewed 3056

I have error 400 and 404 pages that I have created and want to use it for my application. I have declared this in my Startup.cs:

app.UseStatusCodePages(async context => {
    if(context.HttpContext.Response.StatusCode == 400)
    {
        context.HttpContext.Response.Redirect("~/Views/Shared/Errors/AccessDenied.cshtml");
    }
});
app.UseStatusCodePages(async context => {
    if (context.HttpContext.Response.StatusCode == 404)
    {
        context.HttpContext.Response.Redirect("~/Views/Shared/Errors/NotFound.cshtml");
    }
});

Is this correct? When I tested it, I still get redirected back to the standard .net core error page.Am I missing something else?

1 Answers

First of all, you can combine both using an if .. else construct like

app.UseStatusCodePages(async context => {
    if(context.HttpContext.Response.StatusCode == 400)
    {
        context.HttpContext.Response.Redirect("~/Views/Shared/Errors/AccessDenied.cshtml");
    }
    else if (context.HttpContext.Response.StatusCode == 404)
    {
        context.HttpContext.Response.Redirect("~/Views/Shared/Errors/NotFound.cshtml");
    }
});

Second, make sure you call UseStatusCodePages middleware before request handling middleware (for example, Static File Middleware and MVC Middleware).

I would suggest you to use either UseStatusCodePagesWithRedirect (OR) UseStatusCodePagesWithReExecute instead redirecting explicitly

Related