Arquivos do Blog
ASP.NET MVC Action Filters: HandleError, Authorize e OutputCache
Publicado por pedrofernandesblog
Um Action Filter é um atributo que quando adicionado a uma action de um controller, altera a forma que a action é executada.
HandleError
O Action Filter HandleError é utilizado para redirecionar para uma página de erro customizada quando algum erro é disparado pela action do controller.
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
throw new NullReferenceException();
}
public ActionResult About()
{
return View();
}
}
Quando acontecer o erro NullReferenceException na action Index, o ASP.NET MVC irá procurar na pasta das views daquele controller uma view chamada “Error” e renderiza-la para o usuário. Quando a view chamada “Error” estiver na pasta “Shared”, será compartilhada com todos os controllers da aplicação.
Podemos também, redirecionar para páginas de erros específicas para cada tipo de erro:
[HandleError(ExceptionType = typeof(NullReferenceException),
View = "NullError")]
[HandleError(ExceptionType = typeof(SecurityException),
View = "SecurityError")]
public class HomeController : Controller
{
public ActionResult Index()
{
throw new NullReferenceException();
}
public ActionResult About()
{
return View();
}
}
Authorize
Este Action Filter é um dos mais importantes, pois serve para definirmos as diretrizes de segurança da aplicação, com ele é possível determinar quais usuários ou grupos de usuários terão acesso a determinadas actions do controller.
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult About()
{
return View();
}
}
Este código acima, determina que apenas usuários logados podem entrar na action About(). Qualquer acesso não autorizado será redirecionado para a página de login.
Também é possível definir uma segurança baseada em grupos de usuários:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize(Roles="Admin, Funcionarios")]
public ActionResult About()
{
return View();
}
}
Somente usuários do grupo Admin e Funcionarios tem acesso a action About().
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize(Users = "Pedro, Olga")]
public ActionResult About()
{
return View();
}
}
Somente o usuário Pedro e a usuária Olga podem acessar a action About().
OutputCache
Este ActionFilter habilita o cache das actions dos controllers, útil para quando determinadas páginas não mudam com freqüencia e torna desnecessário fazer todo o processamento diversas vezes.
public class HomeController : Controller
{
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return DateTime.Now;
}
public ActionResult About()
{
return View();
}
}
Ao executar a action acima, será exibida na tela a hora atual. E durante 15 segundos você verá a mesma data e hora, isso porque o resultado da action foi colocado no cache e é reaproveitado em vez de executar a action novamente, se este AcionFilter for usado corretamente, é possível ter uma melhora significativa de desempenho da aplicação.
Publicado em ASP.NET MVC
Tags: Action Filter, ASP.NET MVC, Authorize, HandleError, OutputCache

