C# Language Filtri di azione personalizzati

Esempio

Scriviamo filtri di azione personalizzati per vari motivi. Potremmo avere un filtro azioni personalizzato per la registrazione o per salvare i dati nel database prima di qualsiasi esecuzione di azioni. Potremmo anche averne uno per prelevare i dati dal database e impostarlo come valori globali dell'applicazione.

Per creare un filtro azioni personalizzato, è necessario eseguire le seguenti attività:

  1. Crea una classe
  2. Eredita dalla classe ActionFilterAttribute

Sostituire almeno uno dei seguenti metodi:

OnActionExecuting : questo metodo viene chiamato prima che venga eseguita un'azione del controllore.

OnActionExecuted : questo metodo viene chiamato dopo l'esecuzione di un'azione del controller.

OnResultExecuting : questo metodo viene chiamato prima dell'esecuzione di un risultato dell'azione del controller.

OnResultExecuted : questo metodo viene chiamato dopo l'esecuzione di un risultato dell'azione del controller.

Il filtro può essere creato come mostrato nell'elenco seguente:

    using System;
    
    using System.Diagnostics;
    
    using System.Web.Mvc;
    
    
    
    namespace WebApplication1
    {
    
        public class MyFirstCustomFilter : ActionFilterAttribute
        {
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                //You may fetch data from database here 
                filterContext.Controller.ViewBag.GreetMesssage = "Hello Foo";
                base.OnResultExecuting(filterContext);
            }
    
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var controllerName = filterContext.RouteData.Values["controller"];
                var actionName = filterContext.RouteData.Values["action"];
                var message = String.Format("{0} controller:{1} action:{2}", "onactionexecuting", controllerName, actionName);
                Debug.WriteLine(message, "Action Filter Log");
                base.OnActionExecuting(filterContext);
            }
        }
    }