{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
09/11/2010
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!
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: {
}
", 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: {
}
<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.aspx) 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:
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.