Когда использовать ResultFilter в ASP.NET core MVC

Согласно этому документу https://docs.microsoft.com/en-ca/aspnet/core/mvc/controllers/filters#result-filters фильтр результатов будет выполняться после фильтра действий.

Мой вопрос: каковы различия между реализацией OnActionExecuted ActionFilter и OnResultExecuting ResultFilter, учитывая, что я не хочу обрабатывать исключение? Похоже, что ActionFilter позволяет мне обрабатывать исключения и пропускать ExceptionFilter.

В примере в документе не было ясно, как следует выбирать между фильтром действий или фильтром результатов.

Не могли бы вы привести пример, когда фильтр «Результат» предпочтительнее, чем фильтр «Действие»?


person LxL    schedule 30.06.2017    source источник
comment
Возможный дубликат stackoverflow.com/questions/22187076/   -  person Pradeep Kumar    schedule 02.07.2017
comment
@PradeepKumar Ветка SO, которую вы дали, предназначена для старого ASP.NET MVC. Такое же поведение для ядра ASP.NET?   -  person LxL    schedule 02.07.2017


Ответы (1)


Фильтры действий реализуют интерфейс IActionFilter или IAsyncActionFilter, и их выполнение окружает выполнение методов действий. Фильтры действий содержат логику, которая выполняется до и после выполнения действия контроллера.

Фильтры результатов реализуют интерфейс IResultFilter или IAsyncResultFilter, и их выполнение окружает выполнение результатов действий. Фильтры результатов содержат логику, которая выполняется до и после выполнения результата представления.

OnActionExecuted для ActionFilter и OnResultExecuting для ResultFilter

  • OnActionExecuted в ActionFilter: вызывается сразу после вызова метода действия. (Например, выполните некоторую логику после того, как действие выполнит изменение данных просмотра)

  • OnResultExecuting в ResultFilter: вызывается непосредственно перед выполнением результата; это означает, что перед рендерингом представления. (Например, выполните некоторую логику перед модификацией результатов просмотра.)

person Sanket    schedule 02.07.2017
comment
Что мешает применить логику OnResultExecuting к OnActionExecuted? - person LxL; 03.07.2017
comment
Представьте, у вас есть такой сценарий: FirstAction › SecondAction › View. В этом случае, если вы хотите поместить некоторую общую логику после завершения FirstAction, ее можно поместить внутрь OnActionExecuted. - person Sanket; 03.07.2017