2010-08-06 6 views
7

Je travaille sur un projet MVC.NET 2.0 dans lequel j'essaie de mettre en place une logique de gestion d'erreur spéciale dans la méthode OnException du contrôleur. Fondamentalement je veux pouvoir déterminer le type de résultat de la méthode de contrôleur dans laquelle l'exception non gérée a été augmentée, de sorte que je puisse retourner des données d'erreur dans un certain format dépendant du type (json pour JsonResult et html pour ActionResult). Quelqu'un peut-il me désigner un moyen de déterminer ce type? J'apprécierais grandement toute aide.Détermination du type de résultat dans OnException du contrôleur

Merci à l'avance

Répondre

4

En supposant que vous changez didnt le routage par défaut:

protected override void OnException(ExceptionContext filterContext) 
{ 
    var action = filterContext.RouteData.Values["action"].ToString(); 
    var type = filterContext.Controller.GetType(); 
    var method = type.GetMethod(action); 
    var returnType = method.ReturnType; 
    //...do whatever here... 
} 

Bonne chance!

+0

Étant donné deux actions portant le même nom, telles que Modifier et Modifier (un GET, un POST), cela donne une exception AmbiguousMatchException. Existe-t-il un moyen de déterminer à partir du contexte quelle action a été appelée? – yoozer8

+2

@Jim vous pouvez utiliser type.GetMethods(). Où (m => m.Name.Equals (action)) dans ce cas et obtenir la bonne méthode en connaissant le verbe qui a été utilisé dans la demande en cours et en regardant les attributs de chaque méthode. – uvita

Questions connexes