- 操作筛选器简介
- 操作筛选器是ASP.NET Core MVC(Model - View - Controller)和 Web API 中的一种过滤器类型。它可以在操作方法(也就是 API 中的控制器方法)执行之前和之后运行代码。这对于实现诸如日志记录、性能监控、验证等横切关注点非常有用。操作筛选器实现了
IActionFilter
接口,该接口包含两个方法:OnActionExecuting
(在操作方法执行之前调用)和OnActionExecuted
(在操作方法执行之后调用)。
- 创建操作筛选器类
- 首先,创建一个类来实现操作筛选器。例如,创建一个名为
CustomActionFilter
的类,它实现IActionFilter
接口。
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Logging; public class CustomActionFilter : IActionFilter { private readonly ILogger<CustomActionFilter> _logger; public CustomActionFilter(ILogger<CustomActionFilter> logger) { _logger = logger; } public void OnActionExecuting(ActionExecutingContext context) { // 在操作方法执行之前记录日志 _logger.LogInformation("操作方法即将执行"); // 可以在这里进行验证等操作,例如检查模型状态 if (!context.ModelState.IsValid) { context.Result = new BadRequestObjectResult(context.ModelState); } } public void OnActionExecuted(ActionExecutedContext context) { // 在操作方法执行之后记录日志 _logger.LogInformation("操作方法已经执行"); // 可以在这里处理异常等情况 if (context.Exception!= null) { _logger.LogError(context.Exception, "操作方法执行出错"); context.ExceptionHandled = true; context.Result = new ObjectResult("操作出错") { StatusCode = 500 }; } } }
- 在上述代码中:
- 构造函数注入了
ILogger
用于记录日志。 OnActionExecuting
方法在操作方法执行前被调用。这里检查了模型状态是否有效,如果无效,直接返回BadRequestObjectResult
,避免执行无效的操作方法。OnActionExecuted
方法在操作方法执行后被调用。如果操作过程中出现异常,记录异常日志,设置ExceptionHandled
为true
表示异常已经被处理,然后返回一个包含错误信息的ObjectResult
,状态码设置为500
。
- 注册操作筛选器
- 要使操作筛选器生效,需要在
Startup.cs
文件的ConfigureServices
方法中注册它。
public void ConfigureServices(IServiceCollection services) { services.AddControllers(options => { options.Filters.Add<CustomActionFilter>(); }); // 其他服务注册代码... }
- 通过
options.Filters.Add<CustomActionFilter>();
将CustomActionFilter
添加到过滤器集合中。这样,在每个操作方法执行前后,都会执行CustomActionFilter
中的相应逻辑。
通过以上步骤,就可以在ASP.NET Core Web API 中使用操作筛选器来统一处理通用操作,如日志记录、验证和异常处理等。这种方式提高了代码的可维护性和复用性,避免了在每个操作方法中重复编写相同的逻辑。