У меня есть веб-приложение ASP.NET MVC, и я пытаюсь улучшить его возможности обработки ошибок. Я прочитал базовый класс HandleErrorAttribute и хотел использовать его с моими классами контроллеров. Однако, когда я бросаю тестовое исключение из метода в одном из моих классов контроллера, который украшен этим атрибутом, OnException переопределяет мой производный класс: не. Вместо того, чтобы мой получена ошибка класс обработки-х OnException метод будучи вызваны, я вижу сообщение общего ошибки в формате XML и сообщение родовой ошибки не найти нигде в моем приложении:Произвольный класс HandleErrorAttribute не перехватывает исключения?
<Error>
<Message>An error has occurred.</Message>
</Error>
Что я делаю неправильно?
Примечание Я попытался добавить следующие пользовательские ошибки элемента в system.web элемента в моем web.config файла, как показано на этом посту SO, но это не помогло:
ASP.net MVC [HandleError] not catching exceptions
<customErrors mode="On" defaultRedirect="Error" />
Вот мой HandleErrorAttribute производный класс:
public class HandleControllerErrors : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
// Breakpoint set here never hit.
Exception ex = filterContext.Exception;
filterContext.ExceptionHandled = true;
var model = new HandleErrorInfo(filterContext.Exception, "Controller", "Action");
filterContext.Result = new ViewResult()
{
// Use the ErrorInController view.
ViewName = "ErrorInController",
ViewData = new ViewDataDictionary(model)
};
}
}
Вот как я украшаю свой класс контроллера. У меня есть метод в нем, что принудительно генерирует исключение, которое не внутри TRY/поймать блока в .:
[HandleControllerErrors]
public class ValuesController : ApiController
{
[Route("Api/TestException/")]
public IHttpActionResult TestException()
{
throw new InvalidCastException("Fake invalid cast exception.");
}
}
Так MVC или приложение Web API? Или оба? Даже если обе, какая часть? – abatishchev