- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 .NET 核心依赖项,其范围仅限于每个 REST API 请求。它通过调用 AddScoped
添加到 Startup.ConfigureServices
中。
我想为此添加取消支持。如果我将 CancellationToken CancellationToken
添加到任何 Controller 操作的参数中,我可以获得一个在客户端请求被取消时被取消的 token 。然后我可以将该 token 传递给我的依赖项上的所有方法。
但是,依赖项的范围仅限于请求,因此通过操作将 token 传递给方法感觉没有必要 - 我可以以某种方式将 CancellationToken
添加到范围依赖项吗?
最佳答案
could I just add the CancellationToken to the scoped dependency somehow?
嗯,从技术上来说是的。即通过注入(inject) IHttpAccessor
并访问HttpContext.RequestAborted
属性,它与您通常传递到 Controller 操作(如果已定义)的取消标记相同。
但是使用操作参数重载实际上有点不鼓励,因为在每个 Controller 操作中,您都可以通过 HttpContext.RequestAborted
访问取消 token 将其放在 Controller 操作中会使 token 公开,即在创建 Swagger 方案时(至少是 2017 年的情况),其中使用 HttpContext
本身并没有向公众公开。
唯一的异常(exception)似乎是,当使用不继承自 Controller
的“Poco Controller ”时或ControllerBase
并且不注入(inject)IHttpAccessor
进入这个 Controller 。
但是,将取消 token 注入(inject)任意服务是有问题的,因为您对 Web 框架有严格的依赖性 ( IHttpAccessor
/HttpContext
)。
保持 CancellationToken
是最好、最干净的。方法上的参数可以以有意义的方式取消,并使 token 可选,因此您只能在有请求或可以取消的情况下传递参数
public Task<Result> ProcessSomething(string param1, CancellationToken cancellationToken = default)
{
}
关于c# - 使用 CancellationToke 添加作用域依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64205147/
我有一个 .NET 核心依赖项,其范围仅限于每个 REST API 请求。它通过调用 AddScoped 添加到 Startup.ConfigureServices 中。 我想为此添加取消支持。如果我
我是一名优秀的程序员,十分优秀!