ASP.NET 自定义商店中的核心身份异步开销
ASP.NET Core Identity async Overhead in Custom Stores
在开发 ASP.NET 核心 Web 应用程序时,我需要将 ASP.NET 核心标识添加到我的项目中。但是我只需要身份的一小部分,因为例如我知道这个应用程序永远不允许第三方登录。
因此我决定写我的自定义商店。在互联网上搜索有关如何做到这一点的好的解决方案时,我经常看到这样的实现:
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);
但这不会基本上为 getter/setter 创建一个状态机,它应该立即 return 而没有任何大的开销,或者这样做有什么好处,我没有看到现在?
Identity 是一个高度可定制的框架。例如。您可以创建自己的 UserManager,同时仍然使用处理登录、注销等的标准 SignInManager ...
您发现的似乎是 UserManager.GetUserNameAsync()> https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.getusernameasync?view=aspnetcore-2.1
的实现
此方法 return 成为一项任务的原因是,实施 可能 需要数据库或网络访问权限。
如果您真的不想使用 Identity 的任何东西并自己做所有事情,则没有必要 return 任务。但老实说,如果这是一个好方法,我建议三思而后行。
在开发 ASP.NET 核心 Web 应用程序时,我需要将 ASP.NET 核心标识添加到我的项目中。但是我只需要身份的一小部分,因为例如我知道这个应用程序永远不允许第三方登录。 因此我决定写我的自定义商店。在互联网上搜索有关如何做到这一点的好的解决方案时,我经常看到这样的实现:
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);
但这不会基本上为 getter/setter 创建一个状态机,它应该立即 return 而没有任何大的开销,或者这样做有什么好处,我没有看到现在?
Identity 是一个高度可定制的框架。例如。您可以创建自己的 UserManager,同时仍然使用处理登录、注销等的标准 SignInManager ...
您发现的似乎是 UserManager.GetUserNameAsync()> https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.getusernameasync?view=aspnetcore-2.1
的实现此方法 return 成为一项任务的原因是,实施 可能 需要数据库或网络访问权限。
如果您真的不想使用 Identity 的任何东西并自己做所有事情,则没有必要 return 任务。但老实说,如果这是一个好方法,我建议三思而后行。