У меня есть следующие глобальные настройки обработки ошибок для веб-приложения.
Global.asax.cs
protected void Application_Error()
{
//log error
_logger.Error("something bad happened", Server.GetLastError());
//clear error
Server.ClearError();
//redirect to error page
Response.RedirectToRoute(new { controller = "services", action = "error" });
}
Сервисный контроллер с действием ошибки. В этом представлении в качестве модели используется класс ErrorModel.
public ActionResult Error()
{
return View(new ErrorModel{ Message = "nothing really happened go to bed" });
}
Общий вид:
public ActionResult General()
{
throw new Exception("Exception XYZ");
}
Когда я отлаживаю приложение с помощью VS F5 и перехожу на *Представление 1014 *, регистрируется правильное исключение (Exception XYZ
).
Но при тестировании опубликованного веб-приложения IIS и переходе к представлению /general
регистрируется другое неожиданное исключение:
System.InvalidOperationException: переданный в словарь элемент модели имеет тип 'System.Web.Mvc.HandleErrorInfo', но для этого словаря требуется элемент модели типа 'MyWebsite.Models.Services.ErrorModel'.
Exception XYX
вообще не регистрируется.Отображается правильный Error
вид с правильным сообщением об ошибке (nothing really happened go to bed
).
Что я делаю не так?Как мне убедиться, что Exception XYZ
зарегистрировано?
В настоящее время я не собираюсь использовать HandleErrorAttribute
или override void OnException
в контроллере.
EDIT Похоже, что эта проблема уже обсуждалась в 2010 году.ТАК здесь