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?

Foi útil?

Solução

Sim, você pode fazer isso, mas não é assim que funciona fora da caixa. Eu fiz o seguinte:

  1. Crie uma classe de controlador de base e ter todos os controladores de herdar it
  2. Criar um atributo de filtro de ação e tê-lo herdar de FilterAttribute e IActionFilter
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top