• errors
  • iis
  • mvc5

Yeah, this is hard, even Microsoft can’t set up custom error pages properly

TL;DR here is a demo repository

There are many posts on the internet how to set up the custom error pages in ASP.NET MVC and IIS. However, some of them doesn’t cover all errors or suggest to have two files for each custom page (html and aspx). Some articles use client redirect, which is not suitable for SEO. In this short note, we set up custom errors without code duplication, and all cases will be covered.

First, we need to create aspx pages for 404 and 500 errors; let’s keep them simple. We use aspx because we need to override customErrors status code, for some reason it sets it to 200 (OK), also both customErrors and httpErrors don’t work with cshtml.

Remove HandleErrorAttribute. We don’t want to use it because it doesn’t support aspx files.

Add customErrors to web.config file, this config is responsible for handling errors which occurred in .NET stack

Add httpErrors to web.config, this one is needed for errors outside .NET stack (for example static files)

Set .NET Framework version to 4.6.2 or higher. This step is important. Otherwise, custom errors won’t work if a URL contains whitespace.

That’s it!

Here is a demo project
The configuration was tested on .NET Framework 4.6.2 and IIS 8.5/10.

If you found a mistake or the configuration doesn’t work for you, please let me know.