Вы должны настроить
<httpErrors>
раздел под
<system.webServer>
группа разделов в вашем файле web.config.
Пожалуйста, обратитесь к этой статье:
http://www.iis.net/ConfigReference/system.webServer/httpErrors
Кроме того, вы можете использовать контроллер ошибок, который вы указали в своем вопросе, однако IIS должен управлять начальным потоком. В этом разделе вы можете указать IIS, что он должен выполнять URL-адреса, управляемые вашим контроллером.
Также, пожалуйста, позаботьтесь о правильной строке свойства Response.Status в действиях вашего контроллера, так как предлагаемое решение возвращает «200 OK», что может сбить с толку браузеров. Например
public class ErrorsController : Controller
{
public ActionResult NotFound()
{
Response.Status = "404 Not Found";
return View();
}
public ActionResult ServerError()
{
byte[] delay = new byte[1];
RandomNumberGenerator prng = new RNGCryptoServiceProvider();
prng.GetBytes(delay);
Thread.Sleep((int)delay[0]);
IDisposable disposable = prng as IDisposable;
if (disposable != null) { disposable.Dispose(); }
Response.Status = "500 Internal Server Error";
return View();
}
}
Пример конфигурации:
<httpErrors defaultPath="/error.htm" errorMode="Custom" existingResponse="Replace" defaultResponseMode="ExecuteURL">
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="500" path="/errors/servererror/" responseMode="ExecuteURL" />
<error statusCode="404" path="/errors/notfound/" responseMode="ExecuteURL" />
</httpErrors>
Вы можете управлять 404.3 и другими, используя атрибут "subStatusCode".