Rafael Souza Desenvolvimento Web

Posted
30 June 2009 @ 12pm

Tagged
.net, c#

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 });


2 Comments

Posted by
Guilherme Oenning
17 August 2009 @ 2pm

No ASP.NET MVC tem uma forma de fazer isso, pelo menos no RC1 isso funciona:
return this.Json(new { success = true});

Valeu!


Posted by
Rafael Souza
17 August 2009 @ 2pm

É verdade Guilherme, valeu a dica!


Leave a Comment