Lessons in this course (10)

7. Filters — authentication, authorization, action, result and exception

Intermediate★ Must knowLesson 7 of 10
Filter (MVC 5)InterfaceRunsBuilt-in examples
AuthenticationIAuthenticationFilterFirst — establishes identityCustom token checks
AuthorizationIAuthorizationFilterBefore model binding/action[Authorize], [AllowAnonymous], [RequireHttps], [ValidateAntiForgeryToken], [ChildActionOnly]
ActionIActionFilterBefore/after the action method[OutputCache] (also result), custom logging/auditing
ResultIResultFilterBefore/after the result executesModify view data, timing
ExceptionIExceptionFilterWhen an unhandled exception occurs[HandleError]
csharp
public class LogActionAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext ctx)
        => Trace.WriteLine($"→ {ctx.ActionDescriptor.ControllerDescriptor.ControllerName}.{ctx.ActionDescriptor.ActionName}");
    public override void OnActionExecuted(ActionExecutedContext ctx)
        => Trace.WriteLine($"← done, exception: {ctx.Exception?.Message}");
}

// Registration levels: global (FilterConfig), controller, action
public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());          // shows Views/Shared/Error.cshtml when customErrors is On
        filters.Add(new AuthorizeAttribute());            // whole site requires login ([AllowAnonymous] to opt out)
        filters.Add(new LogActionAttribute());
    }
}

Order: authentication → authorization → (model binding) → action filters → action → action filters (after) → result filters → result → result filters (after); exception filters on errors. The Order property and scope (global → controller → action) control ordering.