Action Filter in ASP.Net MVC Application

Objective

This article will give an introduction of Action Filter in ASP.Net MVC framework. This will also explain how to create a custom Action filter.

Action Filters in ASP.Net MVC framework

  1. Action filters are attribute
  2. This could be applied on a particular Action
  3. This could be applied on a Controller.
  4. This modifies the way Action executes.
  5. Custom Action filter could also be created and applied.

ASP.Net MVC framework Action filters could be classified as,


How to use an Action filter?

  1. Create a ASP.NET MVC application, by selection File->New->Project->Web
  2. Right click on Controller folder and add one controller. Feel free to give any name. Here name is TestController.
  3. Create an Action inside the controller. Feel free to give any name of the Action. Here name is TestingActionFilter()
  4. TestingActionFilter() action is returning current time as string.
  5. Apply Action filter OutputCache on the Action.
  6. Give required parameter for OutputCache action filter.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Mvc.Ajax;

namespace usingActionFilter.Controllers

{


public
class
TestController : Controller

{

[OutputCache(Duration = 5,VaryByParam=“none”)]


public
string TestingActionFilter()

{


return
DateTime.Now.ToString();

}

}

}

  1. Run the application.
  2. Type http://localhost:1903/Test/TestingActionFilter to get the output. Port number may differ in your case.


Types of Action filter



Action filter class

  1. The base class of all Action filter are ActionFilterAttribute class.
  2. This is under namespace System.Web.Mvc
  3. It extends FilterAttribute
    Class.
  4. Class contains four methods , which is shown below

using System;

namespace System.Web.Mvc

{

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]


public
abstract
class
ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter

{


protected ActionFilterAttribute();


public
virtual
void OnActionExecuted(ActionExecutedContext filterContext);


public
virtual
void OnActionExecuting(ActionExecutingContext filterContext);


public
virtual
void OnResultExecuted(ResultExecutedContext filterContext);


public
virtual
void OnResultExecuting(ResultExecutingContext filterContext);

}

}


Creating a Custom Action Filter


  1. Add a class in MVC project. Feel free to give any name.


  1. Extend the class ActionFilterAttribute
  2. Override the methods. Call method Message in all overridden function.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Routing;

using System.Diagnostics;

namespace usingActionFilter

{


public
class
CustomActionFilter : ActionFilterAttribute

{


public
override
void OnActionExecuted(ActionExecutedContext filterContext)

{


//base.OnActionExecuted(filterContext);

Message(filterContext.RouteData);

}


public
override
void OnActionExecuting(ActionExecutingContext filterContext)

{


// base.OnActionExecuting(filterContext);

Message(filterContext.RouteData);

}


public
override
void OnResultExecuted(ResultExecutedContext filterContext)

{


//base.OnResultExecuted(filterContext);

Message(filterContext.RouteData);

}


public
override
void OnResultExecuting(ResultExecutingContext filterContext)

{


// base.OnResultExecuting(filterContext);

Message(filterContext.RouteData);

}


public
void Message(RouteData route)

{


var _controllerName = route.Values[“controller”];


var _methodName = route.Values[“action”];


var _returnMessage = String.Format(“controller = {0},action {1}”, _controllerName, _methodName);


Debug.WriteLine(_returnMessage);

}

}

}

  1. Custom Action filter class contains one method called Message. This method is simply writing name of the controller and action on Debug output.
  2. On Action of TestController apply this custom Action filter.


using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Mvc.Ajax;

using usingActionFilter;

namespace usingActionFilter.Controllers

{


public
class
TestController : Controller

{

[CustomActionFilter]


public
string TestingActionFilter()

{


return
“D”;

}

}

}

  1. See the output in Debug mode


Custom Action filter is writing name of the Controller and Action on Debug.



Conclusion

This article gave an introduction of Action Filter in ASP.Net MVC framework. This also explained how to create a custom Action filter.

Happy Coding

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create a website or blog at WordPress.com