Noções básicas sobre filtros de ação (VB)
pela Microsoft
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).
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:
- Filtros de autorização – implementa o
IAuthorizationFilter
atributo . - Filtros de ação – implementa o
IActionFilter
atributo . - Filtros de resultado – implementa o
IResultFilter
atributo . - 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).
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.