在开发Asp.Net Core Web应用程序时,我需要将Asp.Net Core Identity添加到我的项目中。但是我只需要身份的一小部分,因为我知道此应用程序将永远不允许第三方登录。 因此,我决定写我的海关商店。在Internet上搜索有关如何执行此操作的好的解决方案时,我经常看到这样的实现:
public Task SetUserNameAsync(ApplicationUser user, string userName, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
if (user == null)
throw new ArgumentNullException(nameof(user));
if(string.IsNullOrWhiteSpace(userName))
throw new ArgumentNullException(nameof(userName));
user.Username = userName;
return Task.CompletedTask;
}
或
public Task<string> GetUserNameAsync(ApplicationUser user, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
if (user == null)
throw new ArgumentNullException(nameof(user));
return Task.FromResult(user.Username);
}
据我了解,这种调用方式如下:
var user = await store.GetUserNameAsync(_user, CancellationToken.None);
但是,那基本上不会为吸气剂/制氧剂创建一个状态状态器,该状态器应该立即返回而没有任何大的开销,或者这样做有什么好处,而我现在没有看到?
答案 0 :(得分:0)
身份是一个高度可定制的框架。例如。您可以在仍然使用处理登录,注销等的标准SignInManager的同时创建自己的UserManager。
您发现的似乎是UserManager.GetUserNameAsync()> https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.getusernameasync?view=aspnetcore-2.1
的实现此方法返回任务的原因是,实现可能需要数据库或网络访问权限。
如果您真的不想使用任何身份标识并自己做任何事情,则无需返回任务。但老实说,如果这是一个好方法,我建议三思。