【问题标题】:Is CancellationToken available in ASP.NET Core ActionFilter?CancellationToken 在 ASP.NET Core ActionFilter 中是否可用?
【发布时间】:2023-04-08 02:32:02
【问题描述】:

我可以将CancellationToken 注入到 ASP.NET Core 操作方法中,但我更愿意使用操作过滤器来处理它。如何在实现IAsyncActionFilter 时访问取消令牌?我的方法不应该把它作为参数。

【问题讨论】:

  • @madreflection 请看一个例​​子here
  • @madreflection 注入/使用 CancellationToken 值并通过调用堆栈提供这些值非常有意义。例如,它们包含所有连接到同一个 CancellationTokenSource 的“内部魔法”;不像整数那么原始,例如。作为一个结构是一个单独的讨论点。 (注入的值将根据请求或根据需要谨慎,通常不是单例:同样,这是关于特定注入方法的单独讨论,与值类型无关。)
  • 我认为 "inject" 在这里是一个错误的词。相反,您可以说“我可以传递 CancellationToken 进入 ASP.NET Core 操作方法...”
  • 从您的链接中,您需要在您的IActionFilter.OnActionExecuting(ActionExecutingContext context) 方法中获取context.HttpContext.RequestAborted 令牌
  • @vasily.sib 完美,谢谢!真丢脸:)我只是在讨论过程中用谷歌搜索了一个用于共享的代码示例,但实际上并没有阅读它:)您能否在下面发布您的答案以便我接受它?

标签: c# asp.net-core action-filter


【解决方案1】:

您已经在一篇非常好的文章中发布了a link,其中包含一个小提示,您可以从哪里获得此令牌。

MVC 将使用CancellationTokenModelBinder 自动将操作方法​​中的任何CancellationToken 参数绑定到HttpContext.RequestAborted 标记。

因此,您所要做的就是在您的操作过滤器中获取该令牌:

public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        var cancellationToken = context.HttpContext.RequestAborted;
        // rest of your code
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2020-08-16
    • 1970-01-01
    相关资源
    最近更新 更多