Asp.net core ASP.NET核心用户管理器中的取消
我目前正在基于Asp.Net核心标识的UserManager的设计实现一些服务。 在实现中,我想知道如果无法将取消令牌传递到usermanager的方法中,usermanager如何支持取消 我还看到usermanager内部有一个取消令牌属性(具有默认值),它在内部使用,并将传递给使用的异步方法。但由于其保护级别,此属性不可访问Asp.net core ASP.NET核心用户管理器中的取消,asp.net-core,cancellation,asp.net-core-3.0,cancellation-token,Asp.net Core,Cancellation,Asp.net Core 3.0,Cancellation Token,我目前正在基于Asp.Net核心标识的UserManager的设计实现一些服务。 在实现中,我想知道如果无法将取消令牌传递到usermanager的方法中,usermanager如何支持取消 我还看到usermanager内部有一个取消令牌属性(具有默认值),它在内部使用,并将传递给使用的异步方法。但由于其保护级别,此属性不可访问 protected virtual CancellationToken CancellationToken => CancellationToken.None;
protected virtual CancellationToken CancellationToken => CancellationToken.None;
我如何将我在控制器中使用的取消令牌(例如)传递给用户管理器?我必须重载它并通过新方法将其传递到它吗
public class MyUserManager : UserManager<MyUser>
{
/* ... Other stuff... */
protected override CancellationToken CancellationToken {get;set;}
public void SetCancellationToken(CancellationToken cancellationToken)
{
this.CancellationToken = cancellationToken;
}
}
公共类MyUserManager:UserManager
{
/*…其他东西*/
受保护的覆盖取消令牌取消令牌{get;set;}
公共无效SetCancellationToken(CancellationToken CancellationToken)
{
this.CancellationToken=CancellationToken;
}
}
这是使用userManager完成取消的正确方法吗?如果是:为什么这与使用CancellationToken的其他组件不同,比如EF Core,您必须通过方法参数传递CancellationToken
UserManager
在内部处理取消,并从HttpContext.RequestAborted
获取取消令牌。因此,您不需要传入取消令牌,这就是方法不接受取消令牌的原因。但是他从哪里获得对HttpContext的访问权?他能够做到这一点的唯一方法是注入iSeries提供程序,但他只是为了获取ILookupProtectorKeyRing/ILookupProtector或令牌提供程序而使用它。我看不到他在哪里使用HttpContext做任何事情,甚至在哪里设置cancellationToken?DbContext有一个内部服务提供者。关键是你根本不需要担心这个。UserManager负责处理开箱即用的取消。你什么都不做。有没有提示如何在后台服务中使用用户管理器
?有时似乎会触发与后台服务无关的取消令牌。在我的服务中,我有一个循环,它检查一些条件,如果它们通过,就会创建一个新的IServiceScope
,我从中检索UserManager
。如果它总是绑定到某个(不相关的)HttpContext
,那真是一团糟。我应该如何独立于任何HttpContext
使用它?它仅在HttpContext存在时使用(web请求)。它不会创造一个。至于取消,无论如何,这是某种外部过程的函数。就像用户关闭另一端的连接一样。在无人参与的情况下,比如后台服务,支持取消是没有意义的,因为没有任何东西可以取消。我想我必须调查一下,是什么触发了取消。我这里有一个Asp.Net核心应用程序,带有托管服务,所以或多或少是两全其美。后台服务中唯一可能发生的取消是停止服务。非常感谢。