Comment utiliseriez-vous l'ActionFilterAttribute lorsque vous appelez une méthode de contrôleurs directement? Imaginez ce qui suit:MVC 3 méthode de contrôleur d'appel directement, mais aussi appeler le ActionFilterAttribute?
public class ApiController : Controller {
public ActionResult CallSomething() {
return IsCalled();
}
[MyAction]
public ActionResult IsCalled() {
return View();
}
}
Ainsi, la demande vient en /Api/CallSomething
, la méthode CallSomething() appelle en interne une autre méthode (dans ce cas IsCalled()), mais lorsque cette méthode est appelée la ActionFilterAttribute est invoquée et fonctionne. À l'heure actuelle, ActionFilterAttribute ne sera invoqué que s'il fait partie de la requête d'origine, ce qui est logique car cela fait partie du cycle de vie complet de MVC et je ne fais qu'appeler une méthode directement, j'aurais besoin faire un RedirectToAction si je voulais qu'il soit viré par MVC. RedirectToAction modifie l'URL de sorte que cela ne convient pas à mes fins.
Je me suis piquée sur le code System.Web.Mvc mais je ne peux pas voir comment ou quand il est appelé. Je me dis que si cela peut le faire, alors je peux potentiellement utiliser la réflexion. Dans ce cas, les vues ne sont pas pertinentes car je remplace l'ExecuteResult() pour écrire mon propre contenu dans la réponse http.
De toute façon, je me suis résigné à ce que ce n'était peut-être pas possible, mais je pensais juste que ça vaut le coup d'essayer.
Pourriez-vous suggérer une alternative élégante? – David
J'ai déjà donné les 2 alternatives dans ma réponse: rediriger ou demander au client d'invoquer directement la seconde action. –