自定义商店中的Asp.Net Core身份异步开销

时间:2018-10-20 19:18:24

标签: c# asp.net-core-identity asp.net-core-webapi-2.1

在开发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);

但是,那基本上不会为吸气剂/制氧剂创建一个状态状态器,该状态器应该立即返回而没有任何大的开销,或者这样做有什么好处,而我现在没有看到?

1 个答案:

答案 0 :(得分:0)

身份是一个高度可定制的框架。例如。您可以在仍然使用处理登录,注销等的标准SignInManager的同时创建自己的UserManager。

您发现的似乎是UserManager.GetUserNameAsync()> https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.getusernameasync?view=aspnetcore-2.1

的实现

此方法返回任务的原因是,实现可能需要数据库或网络访问权限。

如果您真的不想使用任何身份标识并自己做任何事情,则无需返回任务。但老实说,如果这是一个好方法,我建议三思。