você pode aplicar um ActionFilter em ASP.NET MVC em ação todos os
-
19-08-2019 - |
Pergunta
Eu quero aplicar uma ActionFilter em ASP.NET MVC a ação todos os que tenho na minha aplicação -. em cada controlador
Existe uma maneira de fazer isso sem aplicá-la a todos os métodos ActionResult single?
Solução
Sim, você pode fazer isso, mas não é assim que funciona fora da caixa. Eu fiz o seguinte:
- Crie uma classe de controlador de base e ter todos os controladores de herdar it
- Criar um atributo de filtro de ação e tê-lo herdar de FilterAttribute e IActionFilter
- Decore sua classe controlador de base com o seu novo atributo de filtro de ação
Aqui está um exemplo do atributo filtro de ação:
public class SetCultureAttribute : FilterAttribute, IActionFilter
{
#region IActionFilter implementation
public void OnActionExecuted(ActionExecutedContext filterContext)
{
//logic goes here
}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
//or logic goes here
}
#endregion IActionFilter implementation
}
Aqui está um exemplo da classe controlador de base com este atributo:
[SetCulture]
public class ControllerBase : Controller
{
...
}
Usando este método, desde que suas classes do controlador herda de ControllerBase então o filtro de ação SetCulture sempre ser executado. Eu tenho uma amostra completa e post sobre este no meu blog se você gostaria de um pouco mais detalhadamente.
Espero que ajude!
Outras dicas
Como as coisas ficam melhor ... 2 anos mais tarde temos
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorElmahAttribute());
}
Você não tem que aplicá-la a cada ação, você pode simplesmente aplicá-la a todos os controladores (ie. Colocar o atributo na classe, não o método).
Ou, como Ian mencionado, você pode colocá-lo em uma classe de controlador de base e, em seguida, estendem-se desde que o controlador.