Я пытаюсь реализовать пользовательскую обработку ошибок с помощью атрибутов фильтра действий.ASP.Net MVC Пользовательская обработка ошибок с помощью атрибутов фильтра действий
Мой код выглядит следующим образом:
[HandleError (Order = 2)]
[HandleError (Order = 1, ExceptionType = typeof(NullReferenceException), View = "CustomError")]
public class ArticlesController : Controller
{
public object OhDearACrash()
{
throw new Exception("Oh Dear");
}
public ActionResult NullRefCrash()
{
throw new NullReferenceException();
}
public ActionResult ThrowNotImplemented()
{
throw new NotImplementedException();
}
OhDearACrash и ThrowNotImplemented оба подобран [HandleError], который делает сообщение об ошибке с помощью Error.aspx, расположенной в Views/Shared.
Например с OhDearACrash:
Message = <%= ViewData.Model.Exception.Message %>
оказывает
Message = Oh Dear
NullRefCrash подхватывается кнопку [HandeError], который имеет дело с ExceptionType = TypeOf (NullReferenceException).
Когда CustomError пытается вынести сообщение об ошибке с помощью
Message = <%= ViewData.Model.Exception.Message %>
ViewData.Model является недействительным и не возбуждается исключение
System.NullReferenceException was unhandled by user code
Message="Object reference not set to an instance of an object."
Для создания CustomError.aspx я скопировал и вставил Error.aspx к моим вновь созданным представлениям/ошибкам и переименован в CustomView.aspx.
Поскольку Error.aspx и CustomError.aspx по существу одинаковы, как это происходит?
Edit:
Я создал тестовый проект, который содержит только выше и вид CustomError.aspx отлично работает - Есть ли вообще отлаживать существующий проект, чтобы найти проблему?
В теории нет, это происходит, как я описал это. Если я пройду через код, он будет передан от ThrowNotImplemented on до CustomError.aspx так же, как от OhDearACrash до Error.aspx. –
Когда я скопировал страницу Error в каталоге Shared Views и вставил ее туда и переименовал ее в MyError и ссылался на нее через [HandleError (Order = 1, ExceptionType = typeof (NullReferenceException), View = "MyError")] it работает ли, вы использовали каталог Views/Shared в своем тесте? –