使用取消Toke添加范围依赖项



我有一个 .NET 核心依赖项,其范围限定为每个 REST API 请求。它是在Startup.ConfigureServices中添加的,并调用AddScoped

我想为此添加取消支持。如果我向任何控制器操作的参数添加CancellationToken cancellationToken,我可以得到一个令牌,如果客户端请求被取消。然后,我可以将该令牌传递给我的依赖项上的所有方法。

但是,依赖项的作用域为请求,因此通过操作将令牌向下传递到方法感觉没有必要 - 我可以以某种方式将CancellationToken添加到作用域依赖项吗?

我可以以某种方式将取消令牌添加到作用域依赖项中吗?

嗯,从技术上讲是的。 即通过注入IHttpAccessor并访问HttpContext.RequestAborted属性,这与通常传递到控制器操作(如果定义)中的取消令牌相同。

但是实际上不鼓励使用动作参数重载,因为在每个控制器操作中,您都可以通过HttpContext.RequestAborted访问取消令牌,并将其放在控制器操作中会使令牌公开,即在创建 Swagger 方案时(至少在 2017 年是这样),因为使用HttpContext本身并没有将其公开给公众。

唯一的例外似乎是,当使用不继承ControllerControllerBase并且不IHttpAccessor注入该控制器的"Poco 控制器"时。

但是将取消令牌注入任意服务是有问题的,因为您对 Web 框架(IHttpAccessor/HttpContext)有硬依赖性。

最好和最干净的方法是在您的方法上保留一个CancellationToken参数,该参数可以以有意义的方式取消并使令牌可选,因此您只能在有请求或可以取消的情况下传递参数

public Task<Result> ProcessSomething(string param1, CancellationToken cancellationToken = default)
{
}

相关内容

  • 没有找到相关文章

最新更新