web-dev-qa-db-fra.com

Comment passer des variables à un filtre d'action personnalisé dans l'application ASP.NET MVC

J'ai un contrôleur dans mon application MVC pour lequel j'essaie de consigner les détails à l'aide d'un ActionFilterAttribute personnalisé, en utilisant la méthode onResultExecuted.

j'ai lu ce tutoriel pour comprendre et écrire mon propre filtre d'action. La question est de savoir comment passer des variables du contrôleur au filtre d'action?

  1. Je veux obtenir les variables d'entrée avec lesquelles un contrôleur est appelé. Dites, le nom d'utilisateur/ID utilisateur.
  2. Si (dans certaines situations) une exception est levée par une méthode de contrôleur, je voudrais également enregistrer l'erreur.

Le controlle -

[MyActionFilter]
public class myController : ApiController {
    public string Get(string x, int y) { .. }
    public string somemethod { .. }
}

Le filtre d'action -

public class MyActionFilterAttribute : ActionFilterAttribute {
    public override void onActionExecuted(HttpActionExecutedContext actionExecutedContext) {
        // HOW DO I ACCESS THE VARIABLES OF THE CONTROLLER HERE
        // I NEED TO LOG THE EXCEPTIONS AND THE PARAMETERS PASSED TO THE CONTROLLER METHOD
    }
}

J'espère avoir expliqué le problème ici. Toutes mes excuses si je manque certains objets de base ici, je suis totalement nouveau dans ce domaine.

23
divyanshm

Approche - 1

Filtre d'action

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
    }
}

Méthode d'action

[MyActionFilter]
public ActionResult Index()
{
    ViewBag.ControllerVariable = "12";
    return View();
}

enter image description here

Si vous faites attention à la capture d'écran, vous pouvez voir les informations ViewBag

Approche - 2

Filtre d'action

public class MyActionFilter : ActionFilterAttribute
{
    //Your Properties in Action Filter
    public string Property1 { get; set; }
    public string Property2 { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
    }
}

Méthode d'action

[MyActionFilter(Property1 = "Value1", Property2 = "Value2")]
public ActionResult Index()
{
    return View();
}
70
Imad Alazani