在 ASP.NET Core 开发中,过滤器(Filters)是一个非常强大的机制,它允许我们在请求处理管道的特定阶段插入自定义逻辑。其中,ActionFilter 是最常用的一种过滤器类型,用于在控制器的 Action 方法执行前后运行代码。
本教程将带你从零开始理解并实现一个简单的 ActionFilter,即使你是编程小白,也能轻松上手!
ActionFilter 是 ASP.NET Core 中四种主要过滤器之一(其他包括 AuthorizationFilter、ResourceFilter 和 ExceptionFilter)。它的作用是在 Action 方法执行前和执行后插入自定义逻辑。
常见用途包括:
在 ASP.NET Core 中,你可以通过两种方式创建 ActionFilter:
IActionFilter 接口ActionFilterAttribute 抽象类(推荐,更简洁)下面我们使用第二种方式来创建一个记录 Action 执行时间的日志过滤器。
using Microsoft.AspNetCore.Mvc.Filters;using System.Diagnostics;public class LogActionExecutionTimeAttribute : ActionFilterAttribute{ private Stopwatch _stopwatch; public override void OnActionExecuting(ActionExecutingContext context) { // Action 执行前:启动计时器 _stopwatch = Stopwatch.StartNew(); Console.WriteLine($"开始执行 {context.ActionDescriptor.DisplayName}"); } public override void OnActionExecuted(ActionExecutedContext context) { // Action 执行后:停止计时器并输出耗时 _stopwatch.Stop(); var elapsedMs = _stopwatch.ElapsedMilliseconds; Console.WriteLine($"{context.ActionDescriptor.DisplayName} 执行完成,耗时 {elapsedMs} 毫秒"); }} 你可以在三个级别应用这个过滤器:
下面展示如何在 Action 上使用:
[ApiController][Route("[controller]")]public class HomeController : ControllerBase{ [HttpGet] [LogActionExecutionTime] // ← 在这里应用过滤器 public IActionResult Index() { return Ok(new { message = "Hello from ASP.NET Core!" }); }} 如果你想全局应用,可以在 Program.cs 中注册:
// Program.csvar builder = WebApplication.CreateBuilder(args);builder.Services.AddControllers(options =>{ options.Filters.Add<LogActionExecutionTimeAttribute>(); // 全局注册});var app = builder.Build();app.MapControllers();app.Run(); 使用 ActionFilter 可以让你的代码更加模块化、可复用,并避免在每个 Action 中重复编写相同的逻辑(比如日志、权限检查等)。这正是 Web开发 中“关注点分离”原则的体现。
通过合理使用过滤器,你可以显著提升 ASP.NET Core 应用的可维护性和扩展性。
本教程介绍了 ActionFilter 的基本概念、创建方法和应用场景。你已经学会了如何自定义一个记录执行时间的过滤器,并将其应用到控制器或全局范围。
记住,过滤器 是 ASP.NET Core 中实现横切关注点(Cross-cutting Concerns)的关键工具。掌握它,你的 Web开发 技能将更上一层楼!
关键词:ASP.NET Core, ActionFilter, 过滤器, Web开发
本文由主机测评网于2025-12-02发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122096.html