Tuesday, November 26, 2019

how to create a custom action filter in asp.net mvc

how to create a custom action filter in asp.net mvc

Action Filters are the attributes in asp.net and using for controller. it is derived from System.Attribute. The action filter has mainly three filters
  1. Output Cache
  2. Handle Error
  3. Authorize

Example for Output Cache :

public class AllTechGeeksController : Controller
 { 
   [HttpGet] 
   OutputCache(Duration = 20)] 
   
   public string resultView()
   { 
      return DateTime.Now.ToString("ATG");  
   } 
}


Example for Handle Error :

[HandleError
public class AllTechGeeksController : Controller
 { 
   public ActionResult HomeTest()
   { 
      throw new NullReferenceException(); 
   }  
   
   public ActionResult  Test()
   { 
      return View(); 
   } 
}


Example for Authorize :

public class AllTechGeeksController: Controller 

   [Authorize
   public ActionResult  TestAllTechGeeks()
  { 
      ViewBag.Message = "Authencated Users Only"; 
      return View(); 
   }  
   
   [Authorize(Roles="HR")] 
   public ActionResult  HRModule() { 
      ViewBag.Message = "Only for HR department"; 
      return View(); 
   } 
}


How to create a custom action filter in asp.net mvc

Custom filter inherits from ActionFilterAttribute Class in asp.net mvc.
and overrides minimum any one of the following method.
  1. OnActionExecuting
  2. OnActionExecuted
  3. OnResultExecuting
  4. OnResultExecuted
we can declare the custom action filters in 3 levels  
  1. At Global Levele
  2. At Controller Level
  3. At Action Level

Create a simple Custom Action Filter in Asp.net mvc


using System;
using System.Web.Mvc;
using System.Diagnostics;

namespace webAppAlltechGeeks
{
    public class AllTechGeeksFilter : ActionFilterAttribute
    {
        public override void OnResultExecuting(ResultExecutingContext context)
        {
            //You may ot not fetch data from database here 
            context.Controller.ViewBag.GreetMesssage = "Hello All Tech Geeks";
            base.OnResultExecuting(context);
        }

        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var controllerName = context.RouteData.Values["controller"];
            var actionName = context.RouteData.Values["action"];
            var message = String.Format("{0} controller:{1} action:{2}", "onactionexecuting", controllerName, actionName);
            Debug.WriteLine(message, "Action Filter Log");
            base.OnActionExecuting(context);
        }

    public override void OnResultExecuting(ResultExecutingContext  context)
        {
            //Write your code here 

        }
    public override void OnResultExecuting(ResultExecutingContext  context)
        {
             //Write your code here     

        }

    }
}





No comments: