首页 > 解决方案 > 自定义操作过滤器(带有依赖项)在 ASP.NET Core 3.1 Web API 中不起作用

问题描述

我在让自定义操作过滤器在 ASP.NET Core 3.1 Web API 中工作时遇到了一些困难。我已经遵循了这个 SO以及Microsoft docs,但它不起作用。我创建了一个简单的过滤器(注意:我需要依赖注入);

public class LogFilterAttribute : ActionFilterAttribute, IFilterMetadata
{
    private readonly ILogger<LogFilterAttribute> _logger;

    public LogFilterAttribute(ILogger<LogFilterAttribute> logger)
    {
        _logger = logger;
    }

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        _logger.LogWarning("test");
        base.OnActionExecuting(actionContext);
    }
}

笔记:

我将其注册ConfigureServices如下Startup.cs

services.AddScoped<LogFilterAttribute>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

然后在我的 Web API 控制器中应用它,如下所示:

[ApiVersion("1.0")]
[ApiController]
[Route("v{version:apiVersion}/resources/{id}")]
public class ResourceController : ControllerBase
{
   private readonly ILogger<ResourceController> _logger;

   public ResourceController(ILogger<ResourceController> logger)
   {
      _logger = logger;
   }

   [HttpGet]
   [ServiceFilter(typeof(LogFilterAttribute))]
   public async Task<IActionResult> Get([FromRoute(Name = "id")] string id)
   {
      _logger.LogInformation($"{typeof(ResourceController)}.{nameof(Get)}");
      return Ok();
   }
}

我都尝试过ServiceFilterand TypeFilter,但无济于事 - 它只是跳过过滤器中的断点并直接进入我的路由逻辑。我究竟做错了什么?

标签: asp.net-web-apiaction-filter

解决方案


尝试实施 IActionFilter 代替 ActionFilterAttribute


推荐阅读