Compartilhar via


Noções básicas sobre filtros de ação (VB)

pela Microsoft

Baixar PDF

O objetivo deste tutorial é explicar os filtros de ação. Um filtro de ação é um atributo que você pode aplicar a uma ação do controlador , ou a um controlador inteiro, que modifica a maneira como a ação é executada.

Noções básicas sobre filtros de ação

O objetivo deste tutorial é explicar os filtros de ação. Um filtro de ação é um atributo que você pode aplicar a uma ação do controlador , ou a um controlador inteiro, que modifica a maneira como a ação é executada. A estrutura MVC do ASP.NET inclui vários filtros de ação:

  • OutputCache – Esse filtro de ação armazena em cache a saída de uma ação do controlador por um período especificado.
  • HandleError – Esse filtro de ação manipula erros gerados quando uma ação do controlador é executada.
  • Autorizar – esse filtro de ação permite restringir o acesso a um determinado usuário ou função.

Você também pode criar seus próprios filtros de ação personalizados. Por exemplo, talvez você queira criar um filtro de ação personalizado para implementar um sistema de autenticação personalizado. Ou talvez você queira criar um filtro de ação que modifique os dados de exibição retornados por uma ação do controlador.

Neste tutorial, você aprenderá a criar um filtro de ação do zero. Criamos um filtro de ação log que registra diferentes estágios do processamento de uma ação na janela Saída do Visual Studio.

Usando um filtro de ação

Um filtro de ação é um atributo. Você pode aplicar a maioria dos filtros de ação a uma ação de controlador individual ou a um controlador inteiro.

Por exemplo, o controlador de dados na Listagem 1 expõe uma ação chamada Index() que retorna a hora atual. Essa ação é decorada com o OutputCache filtro de ação. Esse filtro faz com que o valor retornado pela ação seja armazenado em cache por 10 segundos.

Listagem 1 – Controllers\DataController.vb

Public Class DataController
     Inherits System.Web.Mvc.Controller

     <OutputCache(Duration:=10)> _
     Function Index()
          Return DateTime.Now.ToString("T")

     End Function

End Class

Se você invocar repetidamente a ação Index() inserindo a URL /Data/Index na barra de endereços do navegador e pressionando o botão Atualizar várias vezes, você verá o mesmo tempo por 10 segundos. A saída da ação Index() é armazenada em cache por 10 segundos (consulte Figura 1).

Tempo armazenado em cache

Figura 01: Tempo armazenado em cache (clique para exibir imagem em tamanho real)

Na Listagem 1, um único filtro de ação – o OutputCache filtro de ação – é aplicado ao Index() método . Se precisar, você poderá aplicar vários filtros de ação à mesma ação. Por exemplo, talvez você queira aplicar os OutputCache filtros de ação e HandleError à mesma ação.

Na Listagem 1, o OutputCache filtro de ação é aplicado à ação Index() . Você também pode aplicar esse atributo à DataController própria classe. Nesse caso, o resultado retornado por qualquer ação exposta pelo controlador seria armazenado em cache por 10 segundos.

Os diferentes tipos de filtros

A estrutura ASP.NET MVC dá suporte a quatro tipos diferentes de filtros:

  1. Filtros de autorização – implementa o IAuthorizationFilter atributo .
  2. Filtros de ação – implementa o IActionFilter atributo .
  3. Filtros de resultado – implementa o IResultFilter atributo .
  4. Filtros de exceção – implementa o IExceptionFilter atributo .

Os filtros são executados na ordem listada acima. Por exemplo, os filtros de autorização são sempre executados antes que os filtros de ação e os filtros de exceção sejam sempre executados após todos os outros tipos de filtro.

Os filtros de autorização são usados para implementar a autenticação e a autorização para ações do controlador. Por exemplo, o filtro Autorizar é um exemplo de um filtro de autorização.

Os filtros de ação contêm a lógica executada antes e depois da execução de uma ação do controlador. Você pode usar um filtro de ação, por exemplo, para modificar os dados de exibição retornados por uma ação do controlador.

Os filtros de resultado contêm a lógica executada antes e depois que um resultado de exibição é executado. Por exemplo, talvez você queira modificar um resultado de exibição logo antes de a exibição ser renderizada para o navegador.

Os filtros de exceção são o último tipo de filtro a ser executado. Você pode usar um filtro de exceção para lidar com erros gerados pelas ações do controlador ou pelos resultados da ação do controlador. Você também pode usar filtros de exceção para registrar erros.

Cada tipo diferente de filtro é executado em uma ordem específica. Se você quiser controlar a ordem na qual os filtros do mesmo tipo são executados, você poderá definir a propriedade Order de um filtro.

A classe base para todos os filtros de ação é a System.Web.Mvc.FilterAttribute classe . Se você quiser implementar um tipo específico de filtro, precisará criar uma classe que herde da classe base Filter e implemente uma ou mais das interfaces IAuthorizationFilter, IActionFilter, IResultFilter ou ExceptionFilter.

A classe Base ActionFilterAttribute

Para facilitar a implementação de um filtro de ação personalizado, a estrutura do ASP.NET MVC inclui uma classe base ActionFilterAttribute . Essa classe implementa as IActionFilter interfaces e IResultFilter e herda da Filter classe .

A terminologia aqui não é totalmente consistente. Tecnicamente, uma classe que herda da classe ActionFilterAttribute é um filtro de ação e um filtro de resultado. No entanto, no sentido frouxo, o filtro de ação de palavra é usado para se referir a qualquer tipo de filtro na estrutura ASP.NET MVC.

A classe base ActionFilterAttribute tem os seguintes métodos que você pode substituir:

  • OnActionExecuting – esse método é chamado antes que uma ação do controlador seja executada.
  • OnActionExecuted – esse método é chamado depois que uma ação do controlador é executada.
  • OnResultExecuting – esse método é chamado antes que um resultado da ação do controlador seja executado.
  • OnResultExecuted – esse método é chamado depois que um resultado da ação do controlador é executado.

Na próxima seção, veremos como você pode implementar cada um desses métodos diferentes.

Criando um filtro de ação de log

Para ilustrar como você pode criar um filtro de ação personalizado, criaremos um filtro de ação personalizado que registra os estágios de processamento de uma ação do controlador na janela Saída do Visual Studio. Nosso LogActionFilter está contido na Listagem 2.

Listagem 2 – ActionFilters\LogActionFilter.vb

Public Class LogActionFilter
     Inherits ActionFilterAttribute

     Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
          Log("OnActionExecuting", filterContext.RouteData)

     End Sub

     Public Overrides Sub OnActionExecuted(ByVal filterContext As ActionExecutedContext)
          Log("OnActionExecuted", filterContext.RouteData)
     End Sub

     Public Overrides Sub OnResultExecuting(ByVal filterContext As ResultExecutingContext)
          Log("OnResultExecuting", filterContext.RouteData)
     End Sub

     Public Overrides Sub OnResultExecuted(ByVal filterContext As ResultExecutedContext)
          Log("OnResultExecuted", filterContext.RouteData)
     End Sub

     Private Sub Log(ByVal methodName As String, ByVal routeData As RouteData)
          Dim controllerName = routeData.Values("controller")
          Dim actionName = routeData.Values("action")
          Dim message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName)
          Debug.WriteLine(message, "Action Filter Log")
     End Sub

End Class

Na Listagem 2, os OnActionExecuting()métodos , OnActionExecuted(), OnResultExecuting()e OnResultExecuted() chamam o Log() método . O nome do método e os dados de rota atuais são passados para o Log() método . O Log() método grava uma mensagem na janela Saída do Visual Studio (consulte Figura 2).

Gravando na janela Saída do Visual Studio

Figura 02: Gravando na janela Saída do Visual Studio (Clique para exibir a imagem em tamanho real)

O controlador Home na Listagem 3 ilustra como você pode aplicar o filtro de ação Log a uma classe de controlador inteira. Sempre que qualquer uma das ações expostas pelo controlador Home é invocada – o Index() método ou o About() método – os estágios de processamento da ação são registrados na janela Saída do Visual Studio.

Listagem 3 – Controllers\HomeController.vb

<LogActionFilter()> _
Public Class HomeController
     Inherits System.Web.Mvc.Controller

     Function Index()
          Return View()
     End Function

     Function About()
          Return View()
     End Function

            End Class

Resumo

Neste tutorial, você foi apresentado a ASP.NET filtros de ação MVC. Você aprendeu sobre os quatro tipos diferentes de filtros: filtros de autorização, filtros de ação, filtros de resultado e filtros de exceção. Você também aprendeu sobre a classe base ActionFilterAttribute .

Por fim, você aprendeu a implementar um filtro de ação simples. Criamos um filtro de ação log que registra os estágios de processamento de uma ação do controlador na janela Saída do Visual Studio.