2011-09-29 2 views
0

Я хочу настроить некоторые «вещи» в начале действия контроллера и разорвать его после отображения страницы. Я достиг этого путем переопределения фильтров OnActionExecuting и OnResultExecuted (я использую MVC 2).Когда и как надежно используются фильтры MVC?

Большой вопрос, который у меня есть на данный момент, - насколько надежно эти два фильтра называются?

Если ответ на этот вопрос не является 100% времени, я считаю, что это самый простой способ проделать это, было бы использовать некоторые пользовательские фильтры (указав порядок их на «первый» и «последний» .. .

ответ

3

100% время. его часть трубопровода MVC. Если они не сделали это будет довольно большая дыра в безопасности с AuthorizeAttribute.

+4

Если есть неперехваченное исключение ... – tvanfosson

+0

Супер - Думаю, это случай, если исключение тоже поднято в середине рендера? Благодарю. Мне действительно интересно поймать краевые случаи здесь. Я ищу MVC-эквивалент блока «Наконец», так что, несмотря ни на что, я всегда могу «срывать». – Dave

0

Если встроенные фильтры не называется relieably, почему ваши пользовательские фильтры будут лучше?

Замечательная вещь о коде, что, если вы ее понимаете, она имеет тенденцию делать то же самое, что и раньше ry, если заданы те же самые входы.

+0

Вот здесь большая проблема - я предпочел бы иметь абсолютно определенный механизм (например, блок finally). – Dave

1

Если вам нужна абсолютная надежность, вы можете захотеть внедрить очищающий фильтр в качестве IExceptionFilter и запустить его с тем же очищающим кодом, что и переопределение OnResultExecuted (после проверки сначала, что он еще не был выполнен). В зависимости от того, какая «очистка» необходима, вы можете просто использовать HandleErrorAttribute, который, как я полагаю, позволяет запускать OnResultExecuted, поскольку он просто заменяет результат ViewResult Ошибка.

Смежные вопросы