asp.net-web-api - 自定义操作过滤器(带有依赖项)在 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);
}
}
笔记:
ActionFilterAttribute
来自System.Web.Http.Filters
命名空间。我实现
IFilterMetadata
了(这只是一个标记接口),因为这似乎是 and 所要求ServiceFilter
的TypeFilter
。
我将其注册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();
}
}
我都尝试过ServiceFilter
and TypeFilter
,但无济于事 - 它只是跳过过滤器中的断点并直接进入我的路由逻辑。我究竟做错了什么?
解决方案
尝试实施 IActionFilter 代替 ActionFilterAttribute
推荐阅读
- console - 什么是 C++/WinRT 中的绝对路径
- sql - 如何从oracle sql中给出的月份和年份创建日期列?
- api - 为 GraphQL 突变建模
- javascript - 如何使用 isRequired 道具和 onclick 测试渲染或不渲染的子组件
- salesforce - 请指导我如何在 LWC 中调用方法
- json - 提高 JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1, (char 0), Pushshift
- reactjs - 无法使用 React Hooks 转换 null 或 undefined
- c# - 如何使用 roslyn 在 C# 中生成/编辑打字稿代码
- php - 更新恢复ID帖子的ACF字段表单字段
- bash - `git worktree remove` 命令是否在失败时返回非零值?