2010-01-08 5 views
2

Par défaut, ASP.NET MVC utilise ContentResult pour la méthode de contrôleur qui renvoie le résultat non hérité du type actionresult. C'est pourquoi si nous retournons une entité poco, ce sera seulement son nom de type. Puis-je surcharger quelque chose dans le contrôleur pour qu'il renvoie par défaut jsonresult?Modifier le contrôleur par défaut actionresult

Exemple:

// retour représentation du produit JSON au lieu de produit typename

public MyController: Controller 
{ 
    public Product MyAction() 
    { 
      return new Product { Name = "Foo", ID = 1 }; 
    } 
} 

Cordialement, Alexey Z.

Répondre

3

Pourquoi ne pas simplement retourner un JsonResult?

public ActionResult MyAction() 
{ 
    return Json(new Product { Name = "Foo", ID = 1 }); 
} 
+0

Je veux éviter ActionResult comme paramètre de retour. Je veux que ma méthode soit déclarée comme: public Product MyAction() Est-ce possible dans MVC? –

+0

Vous pouvez essayer de surcharger ToString() sur la classe de projet afin qu'elle retourne l'objet au format JSON, mais vous devrez probablement changer le ContentType sur la réponse manuellement dans votre méthode à chaque fois, sinon elle utilisera la valeur par défaut - décidément pas "application/json". Pourquoi voulez-vous que la méthode renvoie un 'Product' au lieu d'un' ActionResult'? Il n'est pas si difficile de décompresser le résultat JSON pour les tests unitaires. – tvanfosson

1

Vous pouvez décorer votre contrôleur avec un attribut comme celui-ci:

public class ReturnJsonAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var result = filterContext.ActionDescriptor.Execute(filterContext, filterContext.ActionParameters); 
     filterContext.Result = new JsonResult {Data = result}; 
    } 
} 
Questions connexes