Desenvolvimento - C#
ASP.NET MVC Action Filters: HandleError, Authorize e OutputCache
Este artigo descreve sobre os Action Filters do ASP.NET MVC e mostra como podemos utilizar os Action Filters HandleError, Authorize e OutputCache.
por Pedro Henrique Barbosa FernandesUm Action Filter é um atributo que quando adicionado a uma action de um controller, altera a forma como a respectiva action é executada.
Podemos também, redirecionar para páginas de erros específicas para cada tipo de erro:
Também é possível definir uma segurança baseada em grupos de usuários:
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 Acion Filter for usado corretamente, é possível ter uma melhora significativa de desempenho da aplicação.