ASP.NET MVC- Filters

ASP.NET MVC- Filters

In ASP.NET MVC, a user request is routed to the appropriate controller and action method. However, there may be circumstances where you want to execute some logic before or after an action method executes. ASP.NET MVC provides filters for this purpose.

 

ASP.NET MVC Filter is a custom class where you can write custom logic to execute before or after an action method executes. Filters can be applied to an action method or controller in a declarative or programmatic way. Declarative means by applying a filter attribute to an action method or controller class and programmatic means by implementing a corresponding interface.

 

MVC provides different types of filters. The following table list filter types, built-in filters, and interface that must be implemented to create custom filters.

Filter Type Description Built-in Filter Interface

Authorization Performs authentication and authorizes [Authorize] IAuthorization

filters before executing an action method. [RequireHttps] Filter

Action filters Performs some operation before and after IActionFilter

an action method executes.

Result filters Performs some operation before or after [OutputCache] IResultFilter

the execution of the view.

Exception Performs some operation if there is an [HandleError] IExceptionFilter

Filters unhandled exception thrown during the

execution of the ASP.NET MVC pipeline.

 

To understand the filter in detail, let's take an example of a built-in Exception filter. Exception filter executes when an unhandled exception occurs in your application. The HandleErrorAttribute class is a built-in exception filter class that renders the Error.cshtml by default when an unhandled exception occurs.

 

 

The following example demonstrates the use of [HandError] attribute on the controller class.

[HandleError]

public class HomeController : Controller

{

    public ActionResult Index()

    {

        //throw exception for demo

        throw new Exception("This is unhandled exception");          

        return View();

    }

    public ActionResult About()

    {

        return View();

    }

    public ActionResult Contact()

    {

        return View();

    }        

}

Above, the [HandleError] attribute applied to the HomeController. So, an error page Error.cshtml will be displayed if any action method of the HomeController throws an unhandled exception. Please note that unhandled exceptions are exceptions that are not handled by the try-catch blocks.

Filters applied to the controller will automatically be applied to all the action methods of a controller.

Please make sure that the CustomError mode is on in System.web section of web.config.

<customErrors mode="On" />

Now, if you run the application, you would get the following error page because we throw an exception in the Index() action method for the demo purpose.

 

Register Filters

Filters can be applied at three levels.

Global Level Filters

You can apply filters at a global level in the Application_Start event of the global.asax.cs file by using default FilterConfig.RegisterGlobalFilters() method. The global filters will be applied to all the controller and action methods of an application.

The [HandleError] filter is applied globally in the MVC application by default in every MVC application created using Visual Studio, as shown below.

// MvcApplication class contains in Global.asax.cs file

public class MvcApplication : System.Web.HttpApplication

{

    protected void Application_Start()

    {

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

    }

}

// FilterConfig.cs located in App_Start folder

public class FilterConfig

{

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)

    {

        filters.Add(new HandleErrorAttribute());

    }

}

Controller Level Filters

Filters can also be applied to the controller class. Controller level filters are applied to all the action methods. The following filter are applicable to all the action methods of the HomeController, but not on other controllers.

[HandleError]

public class HomeController : Controller

{

    public ActionResult Index()

    {

        return View();

    }

    public ActionResult About()

    {

        return View();

    }

    public ActionResult Contact()

    {

        return View();

    }

}

Action Method Filters

One or more filters can also applied to an individual action method. The following filter applied only on the Index() action method.

public class HomeController : Controller

{

    [HandleError]

    public ActionResult Index()

    {

        return View();

    }

    public ActionResult About()

    {

        return View();

    }

    public ActionResult Contact()

    {

        return View();

    }

}

Previous Next

Start Your Data Journey Today With MSAInfotech

Take the first step towards data-led growth by partnering with MSA Infotech. Whether you seek tailored solutions or expert consultation, we are here to help you harness the power of data for your business. Contact us today and let’s embark on this transformative data adventure together. Get a free consultation today!

We utilize data to transform ourselves, our clients, and the world.

Partnership with leading data platforms and certified talents

FAQ Robot

How Can We Help?

Captcha

MSA Infotech