ASP.Net MVC 3 - Кажется, что порядок в атрибуте HandleError работает в обратном направлении? - PullRequest
5 голосов
/ 29 июля 2011

Проблема : Когда я использую свойство Order атрибута HandleError, сначала применяется номер заказа наивысший , а не наименьший первый.

Подробнее

Я хочу настроить свой контроллер для обработки исключений следующим образом:

  • если тип исключения - CustomException, используйте представление «CustomError».
  • в противном случае используйте представление «Ошибка» по умолчанию.

Используя шаблон проекта MVC по умолчанию, я сделал следующее:

  • Удален HandleErrorAttribute из глобальных фильтров.
  • Включены пользовательские ошибки в web.config.

Затем я добавляю эти атрибуты в класс HomeController:

[HandleError(ExceptionType = typeof(Exception), View = "Error")]
[HandleError(ExceptionType = typeof(CustomException), View = "CustomError")]

И это прекрасно работает - если выдается CustomException, отображается представление «CustomError»; если выдается Exception, отображается вид «Ошибка».

Однако я думал, что свойство Order в атрибуте HandleError сделает вещи более явными. Со страницы MSDN :

Чем больше целочисленное значение, тем ниже приоритет фильтра есть.

Исходя из этого, я бы подумал, что следующий код приведет к отображению представления «Ошибка» при любых обстоятельствах:

[HandleError(Order = 1, ExceptionType = typeof(Exception), View = "Error")]
[HandleError(Order = 2, ExceptionType = typeof(CustomException), View = "CustomError")]

Но это не тот случай; это вызывает то же поведение, что и когда свойство Order не было указано. Если я поменяю местами ордера, , это приведет к отображению представления "Ошибка", даже если был выдан CustomException.

По сути, фактический приоритет заказа, похоже, полностью противоположен документации. Я что-то не так делаю или это ошибка?

Ответы [ 2 ]

4 голосов
/ 29 июля 2011

Пожалуйста, перейдите по этой ссылке:

http://forums.asp.net/t/1699131.aspx/1?Filter+Execution+Order+Backwards

заказ был изменен на противоположный

0 голосов
/ 18 августа 2014

Спасибо за размещение этого вопроса! Верьте или нет, документация Microsoft MSDN по этой функции по-прежнему неверна три года спустя. Я отправил отчет об ошибке команде ASP.NET, чтобы исправить это.

...