Filters — code that runs at different stages of request processing.
Filter types:
Action filter:
1public class LoggingFilter : IActionFilter2{3 private readonly ILogger<LoggingFilter> _logger;45 public LoggingFilter(ILogger<LoggingFilter> logger)6 {7 _logger = logger;8 }910 public void OnActionExecuting(ActionExecutingContext context)11 {12 _logger.LogInformation($"Executing {context.ActionDescriptor.RouteValues["action"]}");13 }1415 public void OnActionExecuted(ActionExecutedContext context)16 {17 _logger.LogInformation("Action completed");18 }19}
Attribute filter:
1[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]2public class ValidateModelAttribute : ActionFilterAttribute3{4 public override void OnActionExecuting(ActionExecutingContext context)5 {6 if (!context.ModelState.IsValid)7 context.Result = new BadRequestObjectResult(context.ModelState);8 }9}1011[HttpPost]12[ValidateModel]13public IActionResult Create(CreateDto dto) { }
Exception filter:
1public class CustomExceptionFilter : IExceptionFilter2{3 public void OnException(ExceptionContext context)4 {5 context.Result = new StatusCodeResult(500);6 context.ExceptionHandled = true;7 }8}