Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

Global Filters no ASP.NET MVC 3


Fala galera, ASP.NET MVC 3 tá demais! Desta vez vou mostrar, de forma bastante simples o recurso de Global Filters que será lançado nesta próxima versão.# Global Filters ASP.NET MVC 3 Global Filters são filtros que podemos definir para todos os nossos controllers, ou seja, temos a possibilidade de configurar filtros que serão aplicados para todas as actions de todos os nossos controllers de uma maneira centralizada e unificada.Antes o que tínhamos de fazer era configurar o filtro em cada controller ou em um controller base a ser herdado. Funciona, mas… Pode ser melhor!

Criando Global Filters ASP.NET MVC 3

Vamos criar um filtro que interceptará todas as nossas actions, acrescentando no nosso response a data e hora em que a execução da action começou, e o tempo total de execução da action.Para isso precisamos criar uma classe que herde de ActionFilterAttribute, veja:

public class MeuGlobalFilter : ActionFilterAttribute
{
    private Stopwatch tempoDoRequest = new Stopwatch();

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Write(
            string.Format("Execução começou em: {0}", DateTime.Now));

        base.OnActionExecuting(filterContext);
        tempoDoRequest.Start();
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        tempoDoRequest.Stop();

        filterContext.HttpContext.Response.Write(
            string.Format("<br />Tempo de execução: {0}<br /><br />", tempoDoRequest.Elapsed));
    }
}

Este código é bastante simples, e fala por si só. O que precisamos notar são os métodos em que fizemos o override. São métodos definidos na classe ActionFilterAttribute. Como o nome dos métodos são bem claros, neste caso um deles é disparado quando a action está executando, ou começa a executar. E o outro é disparado quando a action terminou de executar.O argumento passado, filterContext dos tipos ActionExecutingContext e ActionExecutedContext, contém informações necessárias para realizarmos algum processamento: nome da action, argumentos enviados, result, execptions, controller contexto, etc.Para que este Global Filter esteja disponível é necessário que adicionemos ele a lista de Global Filters no arquivo Global.asax:

public 
static void RegisterGlobalFilters(GlobalFilterCollection filters){    filters.Add(new HandleErrorAttribute());
    filters.Add(new MeuGlobalFilter());
    }

Bastante simples não?!E quando executarmos nossa aplicação:

executando aplicacao com globalfilters asp.net mvc 3

Concluindo

Os Global Filters são uma mão na roda para uma série de atividades, como logging, tracing, verificação de segurança e autorização (vou mostrar mais como trabalhar com isso), etc.É uma forma simples de configurar um comportamento comum em nossas aplicações.Veja mais em: http://www.dotnetcurry.com/ShowArticle.aspx?ID=578http://weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-global-action-filters.aspxAbraços,Vinicius Quaiato.

Voltar

Fork me on GitHub