Dotnet Core MVC - применять фильтр действий только для определенных контроллеров - PullRequest
0 голосов
/ 26 сентября 2018

Я работал в MVC на .Net 4, и мои фильтры действий были переопределены в классе контроллера.Таким образом, у меня может быть несколько контроллеров, каждый с уникальным OnActionExecuting методом.

Сейчас я работаю над Dotnet Core 2.1, и все немного по-другому, поэтому я не могу заставить работать одну и ту же методологию.У меня есть контроллер для API, который наследует ControllerBase, а затем еще один контроллер для обслуживания страниц, который наследует Controller.Я создал свой класс фильтра действий, который наследуется от ActionFilterAttribute.

. Затем я зарегистрировал свой фильтр действий, используя следующую строку:

services.AddMvc(config => { config.Filters.Add(typeof(MyActionFilter)); })

Проблема заключается в том, что фильтр теперь применяется к APIконтроллер, а также контроллер страниц.Есть ли способ, которым фильтр действий может быть применен только к определенным контроллерам?

Я использовал эту страницу как ссылку для моей начальной реализации фильтра действий.

Я знаю, чтовнутри метода OnActionExecuting я могу использовать context.Controller.GetType(), чтобы сравнить его с типами моих отдельных контроллеров, но я бы предпочел избежать этого и вместо этого указать, какие контроллеры должны использовать какие фильтры действий.

Спасибо завперед.

1 Ответ

0 голосов
/ 26 сентября 2018
services.AddMvc(config => { config.Filters.Add(typeof(MyActionFilter)); })

Приведенный выше исходный код используется, когда вы хотите применить глобальный фильтр, который означает, что каждый API будет иметь влияние.

Таким образом, для конкретного конкретного контроллера вы просто добавляете атрибут [MyActionFilter] к вамконтроллер

Пример:

[MyActionFilter]
public class HomeController : Controller {
   public ViewResult Index(){..}
}  
...