Asp.Net MVC Exploring Controllers in-depth Part 5 – Bestdotnettraining
Filter Types
Description: Asp.Net MVC Exploring Controllers in-depth Part 5
ASP.NET MVC supports the following types of filters:
1. Authorization Filter:
- Class Implementing IAuthorizationFilter
- Eg: AuthorizeAttribute and RequireHttpsAttribute
- Can override the OnAuthorization method
2. Action Filter:
- Class Implementing IActionFilter
- Eg: ActionFilterAttribute – Used for writing Custom Attributes
- Can override OnActionExecuting and OnActionExecuted
3. Result Filter:
- Class Implementing IResultFilter
- Eg:
- ActionFilterAttribute implements both IResultFilter and IActionFilter.
- Can override OnResultExecuting and OnResultExecuted
4. Exception Filter:
- Class Implementing IExceptionFilter
- Eg: HandleErrorAttribute
Note: Controller class Implements all of the above and we can override in it all the methods
mentioned.
Building Custom Action Filters
An action filter is implemented as an attribute class that inherits from ActionFilterAttribute.
The base ActionFilterAttribute class has the following methods that you can override:
- OnActionExecuting – This method is called before a controller action method is
- OnActionExecuted – This method is called after a controller action method is
- OnResultExecuting – This method is called before the ActionResult instance that is returned by your action is
- OnResultExecuted – This method is called after the ActionResult instance that is returned by your action is
The following example shows a simple action filter that logs trace messages
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class LogAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { //filterContext.Controller.ViewBag.DemoProperty = "From Action Filter"; Trace("On Action Executing" , filterContext.RouteData); } public override void OnActionExecuted(ActionExecutedContext filterContext) { Trace("On Action Executed", filterContext.RouteData); } public override void OnResultExecuting(ResultExecutingContext filterContext) { //filterContext.HttpContext.Response.Write("Advertisement <hr>"); Trace("On Result Executing", filterContext.RouteData); } public override void OnResultExecuted(ResultExecutedContext filterContext) { //filterContext.HttpContext.Response.Write("<hr>Advertisement"); Trace("On Result Executed", filterContext.RouteData); } public void Trace(string methodName, RouteData routeData) { string colName, actionName; colName = routeData.Values["controller"].ToString(); actionName = routeData.Values["action"].ToString(); string str = string.Format("1 - Method Name={0}, Controller Name={1}, Action={2}", methodName, colName, actionName); System.Diagnostics.Trace.WriteLine(str); HttpContext.Current.Response.Write("<br/>" + str + "<br/>"); } } |
Applying Custom Action filter to a controller or Action method:
1 2 3 4 5 6 |
[Log] public ActionResult Index() { return View(); } Note: We can also attach the attribute to Controller class |
Global Registering Action filters
1 2 3 4 5 |
In App_Start\FilterConfig.cs public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new LogAttribute()); } |
visit for complete MVC online training