Для тех, кто заинтересован, я обновил свой код, основываясь на некоторых проблемах, которые у меня были. В частности, я хотел, чтобы пользователи видели страницу с ошибкой, но не изменили свой URL, поэтому я не мог полагаться на пользовательскую обработку ошибок web.config. Я обнаружил, что этот метод дает мне больше контроля над обработкой ошибок.
if (this.Context.IsCustomErrorEnabled)
{
Exception originalError = Server.GetLastError();
Exception replacedError;
if (ExceptionPolicy.HandleException(originalError, "Application Error", out replacedError))
{
if (replacedError != null)
this.Context.Items[ErrorController.ExceptionKey] = replacedError;
else
this.Context.Items[ErrorController.ExceptionKey] = originalError;
Server.ClearError();
// Perform an MVC "Server.Transfer" to the error page.
this.Context.RewritePath(DefaultRedirectUrl);
IHttpHandler handler = new MvcHttpHandler();
handler.ProcessRequest(this.Context);
}
}
Некоторые замечания об этой реализации:
- «DefaultRedirectUrl» - это свойство, которое извлекает URL-адрес перенаправления ошибок по умолчанию из файла web.config, который представляется наиболее логичным местом для хранения этой информации.
- Я использую методологию MVC "Server.Transfer" из этого вопроса на SO.
- Перенаправление по умолчанию - это действие на ErrorController, которое извлекает ошибку из HttpContext и обрабатывает ее соответствующим образом.