+91-90427 10472
         
Dot net training in Chennai -Maria Academy

ASP.NET MVC filters

23 May 2024

ASP.NET MVC filters are powerful tools that enable developers to include cross-cutting concerns in their applications. These concerns include logging, authentication, authorization, error handling, and others. Filters offer a simple and modular approach to adding functionality that can be applied globally, to specific controllers, or even to individual actions. In this article, we will look at the various types of filters available in ASP.NET MVC, as well as their use cases and how to effectively implement them.

Types of Filters in ASP.NET MVC:

ASP.NET MVC supports a variety of filters, each with a specific purpose, the types of filters in ASP.NET MVC are.

Authorization Filters

Action Filters

Result Filters

Exception Filters

Authorization Filters:

Purpose: Manage authorization logic, ensuring that users have permission to access certain resources.
Common Usage: Determine whether a user is authenticated or if they have specific roles or permissions.

Eg:

public class CustomAuthorizationFilter : AuthorizeAttribute

{

    protected override bool AuthorizeCore(HttpContextBase httpContext)

    {

        // Custom authorization logic

        return httpContext.User.Identity.IsAuthenticated;

    }

}

Action Filters:

Purpose: Run code before and after an action method is executed.
Common Usage: Logging, performance measurement, and input validation.

Eg:

public class LogActionFilter : ActionFilterAttribute

{

    public override void OnActionExecuting(ActionExecutingContext filterContext)

    {

        // Code to execute before the action runs

        Log("Action Method Executing");

    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)

    {

        // Code to execute after the action runs

        Log("Action Method Executed");

    }

    private void Log(string message)

    {

        // Logging logic

        Debug.WriteLine(message);

    }

}

Result Filters:

Purpose: Run code before and after the action result is executed.
Common usage: Modifying the result and logging.

Eg:

public class CustomResultFilter : ResultFilterAttribute

{

    public override void OnResultExecuting(ResultExecutingContext filterContext)

    {

        // Code to execute before the result runs

        Log("Result Executing");

    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)

    {

        // Code to execute after the result runs

        Log("Result Executed");

    }

    private void Log(string message)

    {

        // Logging logic

        Debug.WriteLine(message);

    }

}

Exception Filters:

Purpose: Handle exceptions raised by action methods.
Common usage: Logging exceptions and returning custom error views or messages.

Eg:

public class CustomExceptionFilter : FilterAttribute, IExceptionFilter

{

    public void OnException(ExceptionContext filterContext)

    {

        // Handle the exception

        LogException(filterContext.Exception);

        // Optionally set the result to a custom error view

        filterContext.Result = new ViewResult

        {

            ViewName = "Error"

        };

        filterContext.ExceptionHandled = true;

    }

    private void LogException(Exception exception)

    {

        // Logging logic

        Debug.WriteLine(exception.Message);

    }

}

Applying Filters:

Filters can be applied in various ways:

Globally: Applied to all controllers and actions in the application.

public class FilterConfig

{

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)

    {

        filters.Add(new HandleErrorAttribute());

        filters.Add(new CustomAuthorizationFilter());

    }

}

Controller-Level: Applied to all actions within a specific controller.

[CustomAuthorizationFilter]

public class HomeController : Controller

{

    public ActionResult Index()

    {

        return View();

    }

}

Action-Level: Applied to a specific action method.

public class HomeController : Controller

{

    [LogActionFilter]

    public ActionResult Index()

    {

        return View();

    }

}

Custom Filters

Custom filters allow you to encapsulate specific behaviors that can be used throughout your application. To create a custom filter, either implement the filter interface or inherit from the base class.

Conclusion:

ASP.NET MVC filters are critical for handling cross-cutting concerns in a clean and maintainable manner. Understanding and utilizing the various types of filters can help you improve the functionality, security, and reliability of your applications. Filters, whether used globally, at the controller level, or on specific actions, provide a versatile way to intercept and process requests and responses, making them an essential tool in any ASP.NET MVC developer’s toolkit.

 

Social tagging: > >