MVC Framework - Filtros de ação

Na ASP.NET MVC, os controladores definem métodos de ação e esses métodos de ação geralmente têm uma relação um-para-um com os controles da IU, como clicar em um botão ou link, etc. Por exemplo, em um de nossos exemplos anteriores, o UserController métodos contidos na classe UserAdd, UserDelete, etc.

No entanto, muitas vezes gostaríamos de realizar alguma ação antes ou depois de uma operação específica. Para atingir essa funcionalidade, a ASP.NET MVC fornece um recurso para adicionar comportamentos pré e pós-ação nos métodos de ação do controlador.

Tipos de Filtros

A estrutura ASP.NET MVC suporta os seguintes filtros de ação -

  • Action Filters- Filtros de ação são usados ​​para implementar lógica que é executada antes e depois de uma ação do controlador ser executada. Veremos os Filtros de ação em detalhes neste capítulo.

  • Authorization Filters - Filtros de autorização são usados ​​para implementar autenticação e autorização para ações do controlador.

  • Result Filters- Os filtros de resultados contêm lógica que é executada antes e depois que um resultado de visualização é executado. Por exemplo, você pode querer modificar o resultado de uma visualização antes que ela seja renderizada para o navegador.

  • Exception Filters- Filtros de exceção são o último tipo de filtro a ser executado. Você pode usar um filtro de exceção para tratar os erros levantados 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.

Os filtros de ação são um dos filtros mais comumente usados ​​para realizar processamento de dados adicional, ou manipular os valores de retorno ou cancelar a execução da ação ou modificar a estrutura de exibição em tempo de execução.

Filtros de ação

Filtros de ação são atributos adicionais que podem ser aplicados a uma seção do controlador ou a todo o controlador para modificar a maneira como uma ação é executada. Esses atributos são classes .NET especiais derivadas de System.Attribute que podem ser anexadas a classes, métodos, propriedades e campos.

ASP.NET MVC fornece os seguintes filtros de ação -

  • Output Cache - Este filtro de ação armazena em cache a saída de uma ação do controlador por um período de tempo especificado.

  • Handle Error - Este filtro de ação lida com erros levantados quando uma ação do controlador é executada.

  • Authorize - Este filtro de ação permite restringir o acesso a um determinado usuário ou função.

Agora, veremos o exemplo de código para aplicar esses filtros em um controlador de exemplo ActionFilterDemoController. (ActionFilterDemoController é usado apenas como exemplo. Você pode usar esses filtros em qualquer um dos seus controladores.)

Cache de Saída

Example - Especifica o valor de retorno a ser armazenado em cache por 10 segundos.

public class ActionFilterDemoController : Controller { 
   [HttpGet] 
   OutputCache(Duration = 10)] 
   
   public string Index() { 
      return DateTime.Now.ToString("T");  
   } 
}

Tratamento de erro

Example - Redireciona o aplicativo para uma página de erro personalizada quando um erro é acionado pelo controlador.

[HandleError] 
public class ActionFilterDemoController : Controller { 
   
   public ActionResult Index() { 
      throw new NullReferenceException(); 
   }  
   
   public ActionResult About() { 
      return View(); 
   } 
}

Com o código acima, se ocorrer algum erro durante a execução da ação, ele encontrará uma visualização chamada Erro na pasta Visualizações e renderizará essa página para o usuário.

Autorizar

Example - Permitir que apenas usuários autorizados façam login no aplicativo.

public class ActionFilterDemoController: Controller { 
   [Authorize] 
   
   public ActionResult Index() { 
      ViewBag.Message = "This can be viewed only by authenticated users only"; 
      return View(); 
   }  
   
   [Authorize(Roles="admin")] 
   public ActionResult AdminIndex() { 
      ViewBag.Message = "This can be viewed only by users in Admin role only"; 
      return View(); 
   } 
}

Com o código acima, se você tentar acessar o aplicativo sem fazer login, um erro semelhante ao mostrado na imagem a seguir será gerado.