Por que eu devo ler este artigo:Este tema é útil para os desenvolvedores que desejam aprimorar e se aprofundar na infraestrutura do ASP.NET MVC 5 e que desejam ter uma noção da aplicabilidade, extensibilidade e facilidade que os Filtros no MVC impõem no nosso projeto web.

Veremos soluções para problemas complexos, como controle de transação por requisição, gerenciamento de erros, autorização, autenticação e cache de dados de forma bastante simples e bem detalhada, para ajudar no aprendizado e na extensibilidade das soluções propostas.

Antes de aventurarmos no mundo do Filtro, ou Filter, devemos conhecercomo funciona os atributos (atributes). Um atributo não é nada mais do que uma classe que possui um comportamento um pouco diferente do que estamos acostumados a utilizar.

Atributos

Um atributo funciona como uma informação a mais que damos para uma determinada classe, ou um determinado método, parâmetro, etc. Na prática o mesmo funciona como uma anotação que fazemos para os elementos, que poderão ser utilizadas em tempo de execução.

Conheça algumas características de um atributo:

· Toda classe de Atributo deve conter um atributo informando para quais elementos da linguagem o atributo pode ser usado. Essa informação é definida através do atributo AttributeUsage.

· Os atributos são classes públicas derivadas de System.Atribute e devem ter pelo menos um construtor público.

· As classes podem possuir dois tipos de parâmetros, os chamados parâmetros posicionais, aqueles que devem ser especificados toda vez que o atributo for usado e são especificados como argumentos do construtor da classe do atributo. Já os parâmetros nomeados, são parâmetros que são opcionais, se os mesmos tiverem de ser usados, o nome do parâmetro deve ser informado. Confira nas Listagens 1 e 2 como são utilizados os parâmetros posicionais e os parâmetros nomeados, respectivamente.

Os parâmetros são restritos a valores constantes dos seguintes tipos:

  • Tipos Simples (bool, byte, char, short, int, long, float e double).
  • String.
  • System.Type.
  • Enums.
  • Objeto (o argumento para o parâmetro de um atributo do tipo objeto deve ser um valor constante dos tipos acima).
  • Matrizes unidirecionais de qualquer um dos tipos acima referido.

Listagem 1. Parâmetros Posicionais


01  [AttributeUsage(AttributeTargets.All)] 
02  public class MeuAtributoAttribute : Attribute
03 {
04  }

Na Listagem 1 foi declarado um atributo chamado MeuAtributoAttribute, e está sendo utilizado um outro atributo para informar para quais elementos da linguagem podemos utilizar o atributo criado. O atributo chamado AttributeUsage é um exemplo de Parâmetro Posicional, pois o mesmo obriga que em sua utilização seja informado um parâmetro do tipo AttributeTargets.

Listagem 2. Parâmetros Nomeados


01 public class HomeController : Controller
02 {
03       [OutputCache(Duration = 10)]
04       public ActionResult Index()
05       {
06               return View();
07        }
08 }

Na Listagem 2 temos um exemplo da utilização de um parâmetro nomeado. Foi declarada uma Action chamada Index, e estamos informando com a utilização do atributo OutputCache, que estamos fazendo cache das chamadas ao mesmo e que o cache terá uma duração de 10 segundos. O atributo OutputCache não obriga a utilização de nenhum parâmetro, logo, para que possamos utilizar o parâmetro Duration devemos informar seu nome.

Para entendemos melhor, um parâmetro nomeado nada mais é do que uma propriedade, ou seja, para criar um parâmetro nomeado, basta criar uma propriedade que a linguagem suporta tal utilização. Lembrando que essa característica de parâmetro nomeado não é só para atributos, mas para qualquer classe. Confira na Listagem 3.

Listagem 3. Parâmetro Nomeado


01 public class Pessoa 
02 {
03        public string Nome { get; set; }
04 }
05
06 class Program
07 {
08       static void Main(string[] args)
09       {
10              var pessoa = new Pessoa { Nome = “Welson Play” } 
11        }
12  }

Podemos concluir com o exemplo apresentado que os parâmetros Nomeados não é uma característica dos atributos e sim da classe.

Uma conversão que é bastante utilizada pelos desenvolvedores é o sufixo Attribute para todos os atributos para que possamos diferenciá-los das classes comuns, ...

Fim do trecho gratuito • continue abaixo
CONTEÚDO EXCLUSIVO

Desbloqueie toda a DevMedia

  • +2000 artigos e vídeos
  • +40 trilhas sobre Front-end, Back-end, IA e muito mais
  • +5000 exercícios práticos
  • Mentorias ao vivo individuais
até 50% OFF
A partir de
R$ 69 /mês
Assinar agora