ASP.NET MVC e suas ActionResult

O framework MVC da Microsoft usa um determinado objeto para definir qual tipo de resultado/output a action executada deve retornar. São eles:

  • ContentResult - Pode ser usado para retornar textos simples.
  • EmptyResult - Esse serve para retornar resultados em branco, quando quiser que o output seja vazio.
  • HttpUnauthorizedResult - Usado quando o usuário não tem permissão para executar a action. Retorna o 401 como status da requisição.
  • JsonResult - Serializa um objeto em formato JSON, bom para ser usando em requisições AJAX.
  • RedirectResult - Resultado usado para redirecionamentos.
  • RedirectToRouteResult - Também usado para redirecionamentos, mas a URL está ligada a uma rota.
  • ViewResultBase - Classe abstrata, usada para renderizar HTMLs.
    • PartialViewResult - Estende ViewResultBase para renderizar as views e seus HTMLs.
  • BinaryResult - Classe abstrata usada para resultados binários.
    • BinaryStreamResult - Estende BinaryResult, pode ser usado para escrever imagens direto no stream do resutado.

Porém, em alguns casos, retornar um texto simples, ou um JSON pequeninho, é meio chato. Considere o código abaixo:

JsonResult json = new JsonResult();
json.ContentType = "text/javascript";
json.Data = new { success = true };
return json;

Isso poderia ser mais simples não? Porém, a classe JsonResult, e nenhuma outra ActionResult aceita parâmetros no construtor. Por isso criei duas classes que podem ser usadas como ActionResult, para simplificar essa tarefa. Elas devem ser usadas assim:

return new SimpleResult("Hello World");
return new SimpleResult(1);
return new SimpleResult(1257.14);
return new SimpleResult(true);

e

return new SimpleJsonResult(new { success = true });

Pronto, agora é hora de refatorar código. :)

UPDATE: Conforme o Guilherme comentou ali embaixo, o ASP.NET MVC tem um método que já simplifica as coisas.

return Json("Hello World");
return Json(1);
return Json(1257.14);
return Json(true);

e

return Json(new { success = true });


blog comments powered by Disqus



powered by jekyll. hosted on heroku