在ASP.NET Core 3.1 Web API中,如果自定义动作过滤器(带依赖项)不起作用,可能是由于以下几个原因:
IAsyncActionFilter
或IActionFilter
接口。public class CustomActionFilter : IAsyncActionFilter
{
private readonly IMyDependency _myDependency;
public CustomActionFilter(IMyDependency myDependency)
{
_myDependency = myDependency;
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// 过滤器逻辑
// 可以使用 _myDependency 进行其他操作
await next();
}
}
Startup.cs
文件的ConfigureServices
方法中正确注册自定义动作过滤器和依赖项。public void ConfigureServices(IServiceCollection services)
{
// 注册依赖项
services.AddScoped();
// 注册自定义动作过滤器
services.AddScoped();
services.AddControllers();
}
[ServiceFilter(typeof(CustomActionFilter))]
特性。[ApiController]
[Route("api/[controller]")]
[ServiceFilter(typeof(CustomActionFilter))]
public class MyController : ControllerBase
{
// 控制器逻辑
}
请注意,如果自定义动作过滤器依赖于其他服务,需要将这些服务注册为依赖项,并在构造函数中进行注入。这样,ASP.NET Core 3.1 Web API才能正确解析并应用自定义动作过滤器。