askvity

What is Action Filter vs Exception Filter?

Published in ASP.NET Filters 4 mins read

Action Filters and Exception Filters are distinct types of filters in web frameworks (like ASP.NET Core) designed to intercept stages of the request processing pipeline, but they serve different purposes and execute at different times.

Understanding Filters in the Request Pipeline

Web frameworks often use a pipeline model where a request passes through several stages before generating a response. Filters allow you to inject logic at specific points within this pipeline.

Common filter types include:

  • Authorization Filters: Determine if the user is authorized.
  • Resource Filters: Run before and after authorization.
  • Action Filters: Run before and after an action method executes.
  • Exception Filters: Handle uncaught exceptions that occur during request processing.
  • Result Filters: Run before and after the action result is executed.

What are Action Filters?

Action Filters are executed before and after a specific action method in a controller is called. They allow you to add processing logic around the execution of an action.

  • Purpose: To add logic related to the action's input or output.

  • Execution:

    • OnActionExecuting: Runs before the action method. Can modify action arguments or short-circuit execution by setting context.Result.
    • OnActionExecuted: Runs after the action method has executed. Can modify the action's result or check for exceptions that occurred within the action method.
  • Common Use Cases:

    • Validating model state (ModelState).
    • Logging action execution details.
    • Modifying action method parameters or results.
    • Implementing caching logic around action execution.

What are Exception Filters?

Exception Filters are executed only when an uncaught exception occurs somewhere after a resource filter has finished processing, including within action methods, action filters, or result filters.

  • Purpose: To handle unhandled exceptions and potentially generate an appropriate response (like an error page or API error payload).

  • Execution: OnException: Runs when an exception occurs. The filter can handle the exception, preventing it from bubbling further up the pipeline, typically by setting context.Result to produce an action result.

  • Crucial Behavior (as per reference): An exception filter handles an exception by producing an action result. When an exception filter handles an exception this way, subsequent Result Filters are not executed because the request pipeline's outcome is now dictated by the result set by the exception filter, not the result originally intended by the action or action filter.

  • Common Use Cases:

    • Logging exceptions.
    • Providing a consistent error response format (e.g., for APIs).
    • Displaying user-friendly error pages for web applications.
    • Preventing sensitive exception details from being revealed to the client.

Key Differences: Action Filter vs Exception Filter

Here's a summary comparing the two filter types:

Feature Action Filter Exception Filter
Primary Role Intercept action method execution (before/after) Handle unhandled exceptions
Execution Time Runs before and after the action method Runs only when an unhandled exception occurs
Purpose Modify action behavior, input, or output Catch exceptions, log errors, generate error response
Context ActionExecutingContext, ActionExecutedContext ExceptionContext
Result Impact Can modify/set action result Handles exceptions by setting a result; prevents subsequent Result Filters from running if it handles the exception
Trigger Action method execution Unhandled exception

In simple terms, Action Filters deal with the normal flow around executing a controller method, while Exception Filters deal with abnormal flow when something goes wrong.

By understanding these differences, developers can choose the correct filter type for tasks like validation, logging, response modification, or robust error handling in their web applications.

Related Articles