Как установить фильтр действий во всех действиях в ASP.NET MVC? - PullRequest
4 голосов
/ 24 августа 2009

Есть ли способ иметь фильтр действий, например

public class MyActionFilterAttribute : ActionFilterAttribute {
    public override void OnActionExecuting(ActionExecutingContext context) {
    ...

автоматически применяться ко всем действиям на веб-сайте?

Ответы [ 5 ]

8 голосов
/ 24 августа 2009

Я не верю, что есть готовый способ сделать это. Для простых сайтов проще всего применить фильтр на уровне контроллера. Это довольно часто, и, как правило, хорошая идея иметь свой собственный базовый класс контроллеров на случай, если такие вещи появятся там, где вы хотите распространить его на все ваши контроллеры. E.g.:

[MyActionFilter]
public class MyBaseController : Controller
{
  ...
}

public class HomeController : MyBaseController
{
  ...
}

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

6 голосов
/ 14 мая 2013

Я знаю, что это старый вопрос, но начиная с ASP.NET MVC 3, вы можете использовать глобальные фильтры .

2 голосов
/ 24 августа 2009
  1. Вы можете применить его ко всему классу контроллера, чтобы он влиял на все действия на контроллере.
  2. Вы можете применить его к базовому классу контроллеров, и все ваши контроллеры наследуются от этого контроллера, таким образом, получая эффект применения фильтра ко всем контроллерам.
  3. Вы можете использовать базовый класс контроллера и переопределить метод OnActionExecuting непосредственно на контроллере, который, вероятно, более уместен, чем использование фильтра, если вы намерены применить код фильтра ко всем действиям по всей плате.
0 голосов
/ 02 мая 2018

Вы можете просто использовать ActionFilters, как отметил Виктор, в вашем global.asax

protected void Application_Start()
{
   // Register global filter
   GlobalFilters.Filters.Add(new CustomActionFilterAttribute());
}

Или в AspNetCore вы можете попробовать

  services.AddMvc(options =>
  {
    options.Filters.Add(new CustomActionFilterAttribute());
  });
0 голосов
/ 24 августа 2009

Где NewlyCreatedActionFilter - это ActionFilter, который вы создаете, очевидно. :)

[NewlyCreatedActionFilter]
public class Basecontroller : Controller
{
  ...
}

public class HomeController : BaseController
{
  ...
}

public class AccountController : BaseController
{
  ...
}

Оба эти класса контроллеров наследуются от BaseController, поэтому фильтр NewlyCreatedActionFilter применяется ко всем.

...