Filtros de ação no MVC [Tipos de filtros com exemplos]
Publicados: 2021-03-04Índice
ASP.NET MVC – Filtros de ação
Nos filtros MVC (Model-View-Controller), usamos a lógica adicional de acordo com as diferentes funcionalidades ou lógica do processamento de solicitações do MVC Framework.
Os filtros MVC implementam um processo para diferentes níveis: por exemplo, autorização, registro e armazenamento em cache.
Podemos considerar um filtro de ação como um atributo que podemos implementar em um método de ação do controlador para fazer a modificação de acordo com a lógica de negócios.
Podemos considerar filtros MVC do sistema. O atributo é definido como a classe, método, propriedades e campos.
Leia também: Projeto MVC
O ASP.NET MVC Framework incorpora vários filtros de ação
Autorizar : este filtro de ação tem a capacidade de restringir o acesso a uma função de usuário específica.
OutputCache : É o filtro de ação e armazena em cache o resultado de um método de ação do controlador no tempo definido.
HandleError : Quando esta ação do controlador é executada, ela trata os erros em um cenário específico se o código falhar. Ele permite que você crie seu filtro de ação personalizado.
Por exemplo, podemos criar um filtro de ação personalizado para executar um sistema de autenticação personalizado.
Fonte
Filtre o pipeline no fluxo do ciclo de vida de solicitação e resposta:
Fonte
O filtro fornece duas categorias de implementação da lógica no código, ele executa diferentes definições de interface-
- Síncrono
- Assíncrono
Os filtros síncronos
No filtro Sincronização, podemos executar o código antes e depois do pipeline durante o processamento; podemos considerá-lo como métodos de ação OnStageExecuting e OnStageExecuted .
Filtros assíncronos
Os filtros assíncronos são descritos com um único método, que possui os métodos de
- OnActionExecuting
- OnActionExecuted
- OnActionExecutionAsync
Os trechos de código abaixo são o tipo de declaração
classe pública TimestampFilter : IActionFilter, IAsyncActionFilter
{
public void OnActionExecuting (contexto ActionExecutingContext)
{
context.ActionDescriptor.RouteValues[“timestamp”] = DateTime.Now.ToString();
}
public void OnActionExecuted (contexto ActionExecutedContext)
{
var ts = DateTime.Parse(context.ActionDescriptor. RouteValues[“timestamp”]).AddHours(1).ToString();
context.HttpContext.Response.Headers[“X-EXPIRY-TIMESTAMP”] = ts;
}
Public async Task OnActionExecutionAsync (contexto ActionExecutingContext, ActionExecutionDelegate próximo)
{
this.OnActionExecuting(context);
var resultContext = aguarde próximo();
this.OnActionExecuted(resultContext);
}
}
Tipos de filtros de ação no MVC
A estrutura ASP.NET MVC mantém vários filtros:
Filtros de autorização: Executa o atributo IAuthorisationFilter.
Filtros de ação: Executa o atributo IActionFilter.
Filtros de resultado : execute o atributo IResultFilter.
Filtros de exceção: Executa o atributo IExceptionFilter.
Filtros de autorização
Podemos usá-lo para acessibilidade do usuário e podemos declará-lo antes da implementação do método de ação no controlador.
O Filtro de Autorização habilita dois atributos integrados, por exemplo: Authorize e AllowAnonymous
Podemos usá-los na lógica personalizada no código de acordo com nossos requisitos de negócios.
O trecho de código abaixo é o exemplo de filtros de autorização
[Autorizar]
public ActionResult SecureMethod()
{
return Visão();
}
[PermitirAnônimo]
public ActionResult NonSecureMethod()
{
return Visão();
}
public ActionResult SecureMethod()
{
return Visão();
}
Filtros de ação
Podemos descrever os filtros de ação antes de executar o método de ação e depois do método de ação.
Ele contém dois tipos de métodos.
- OnActionExecuted
- OnActionExecuting
O snippet de código abaixo é o exemplo de Filtros de Ação
usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Web;
usando System.Web.Mvc;
namespace TutorialActionFilter.Filters
{
classe pública Myactionfilter : FilterAttribute,IActionFilter
{
public void OnActionExecuted (ActionExecutedContext filterContext)
{
if (filterContext.HttpContext.Session[“UserID”] != null)
{
filterContext.Result = newRedirectResult(“/Home/Index”);
}
outro
{
filterContext.Result = newRedirectResult(“/Login /Login”);
}
}
public void OnActionExecuting (ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Session[“UserID”] != null)
{
filterContext.Result = newRedirectResult(“/Home/ Index”);
}
outro
{
filterContext.Result = newRedirectResult(“/Login /Login”);
}
}
}
}
[TutorialActionFilter]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetPerson()
{
Pessoa p = new Pessoa();
return View(“Pessoa”,p);
}
Filtros de resultados
Podemos descrever os filtros de Ação antes de executar o Método de Ação e após a execução do Método de Ação.
Ele contém dois tipos de métodos.
- OnResultExecuted
- OnResultExecuting
O trecho de código abaixo é o exemplo de Filtros de Resultado
usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Web;
usando System.Web.Mvc;
namespace ResultFilter.Filters
{
classe pública MyResultfilter : FilterAttribute,IResultFilter
{
public void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.HttpContext.Session[“UserID”] != null)
{
filterContext.Result = newRedirectResult(“/Home/Contato”);
}
outro
{
filterContext.Result = newRedirectResult(“/Login/Login”);
}
}
public void OnResultExecuting (ResultExecutingContext filterContext)
{
if (filterContext.HttpContext.Session[“UserID”] != null)
{
filterContext.Result = newRedirectResult(“/Home/Contato”);
}
outro
{
filterContext.Result = newRedirectResult(“/Login/Login”);
}
}
}
}
[MeuFiltroResultado]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetPerson()
{
Pessoa p = novaPessoa();
return View(“Pessoa”,p);
}
Filtros de exceção
Podemos usá-los quando um controlador ou método de ação lança a exceção.
Este filtro de exceção é importante para capturar a exceção.
Abaixo está o trecho de código para usar filtros de exceção
usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Web;
usando System.Web.Mvc;
namespace ExceptionFilter.Filters
{
classe pública MyExceptionFilter : FilterAttribute, IExceptionFilter
{
public void OnException (ExceptionContext filterContext)
{
filterContext.Controller.ViewBag.onExceptionError = “Filtro ExceptionFilter chamado”;
filterContext.HttpContext.Response.Write(“Filtro ExceptionFilter chamado”);
}
}
}
[MyExceptionFilter]
classe pública HomeController : Controlador
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetPerson()
{
Pessoa p = novaPessoa();
return View(“Pessoa”,p);
}
}
Leia também: Projeto Java MVC
Aprenda cursos de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.
Conclusão
Esperamos que este artigo tenha ajudado você a entender os filtros de ação no MVC.
Se você estiver interessado em aprender mais sobre desenvolvimento full-stack, confira o Programa PG Executivo do upGrad & IIIT-B em Desenvolvimento de Software Full-stack, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, mais de 9 projetos e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.
O que são estruturas de dados em programação?
As estruturas de dados são a maneira como organizamos os dados em um programa. As duas estruturas de dados mais importantes são matrizes e listas vinculadas. As matrizes são a estrutura de dados mais familiar e a mais fácil de entender. Arrays são basicamente listas numeradas de itens relacionados. Eles são simples de entender e usar, mas não são muito eficientes ao trabalhar com grandes quantidades de dados. As listas vinculadas são mais complexas, mas podem ser muito eficientes se usadas corretamente. São boas opções quando você precisa adicionar ou remover itens no meio de uma lista grande ou quando precisa pesquisar itens em uma lista grande.
Quais são as diferenças entre lista encadeada e arrays?
Em arrays, um índice é usado para acessar um elemento. Os elementos na matriz são organizados em ordem sequencial, o que facilita o acesso e a modificação de elementos se um índice for usado. A matriz também tem um tamanho fixo. Os elementos são alocados no momento de sua criação. Na lista encadeada, um ponteiro é usado para acessar um elemento. Os elementos de uma lista encadeada não são necessariamente armazenados em ordem sequencial. Uma lista vinculada tem um tamanho desconhecido porque pode conter nós no momento de sua criação. Um ponteiro é usado para acessar um elemento, então a alocação de memória é mais fácil.
O que é um ponteiro em C?
Um ponteiro é um tipo de dado em C que armazena o endereço de qualquer variável ou função. Geralmente é usado como referência para outro local de memória. Um ponteiro pode conter um endereço de memória de uma matriz, estrutura, função ou qualquer outro tipo. C usa ponteiros para passar valores e receber valores de funções. Ponteiros são usados para alocar dinamicamente espaço de memória.