【问题标题】:ASP.NET Core 2 - GetUserIdAsync returning null Result with Guid IdsASP.NET Core 2 - GetUserIdAsync 返回带有 Guid Id 的空结果
【发布时间】:2018-07-21 04:18:30
【问题描述】:

我目前正在将一个站点移植到 ASP.NET Core 2,当我使用扩展 IdentityUser<Guid> 的用户类调用 userManager.GenerateEmailConfirmationTokenAsync(user) 时,我收到了以下异常:

System.ArgumentNullException: Value cannot be null.
Parameter name: value
   at System.IO.BinaryWriter.Write(String value)
   at Microsoft.AspNetCore.Identity.DataProtectorTokenProvider`1.<GenerateAsync>d__11.MoveNext()

GenerateAsync() 调用UserManager.GetUserIdAsync(),它返回Result 中的null 值,Write() 正在抱怨,即使我经过的User 实例有@987654334 @在Id.

如果我直接在调用GenerateEmailConfirmationTokenAsync() 的同一个UserManager 实例上调用userManager.GetUserIdAsync(user),我会在null 中得到相同的null 值。

有人知道如何解决这个问题吗?

编辑:根据要求,可以在github.com/BenjaminNolan/GetUserIdAsyncNullExample找到一个功能示例

【问题讨论】:

标签: c# asp.net-core asp.net-core-2.0 asp.net-core-identity


【解决方案1】:

您遇到的问题是 these lines 来自您的 User 类:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DefaultValue("NEWSEQUENTIALID()")]
new public Guid Id { get; set; }

您在此处使用 new modifier 会抑制以下编译器警告:

“User.Id”隐藏继承的成员“IdentityUser.Id”。

此警告通知您,如果您通过 User 引用(而不是例如 IdentityUser&lt;Guid&gt; 引用 - 基类)访问 Id,您将使用 不同 @ 987654328@财产。如果您在控制器中检查 user.Id 的值并将其与 ((IdentityUser&lt;Guid&gt;)user).Id 的值进行比较(为了访问 its Id,将其转换为基类,您可以看到它的样子属性)。

在您的情况下很容易修复 - 只需从您的 User 类中删除 Id 属性:您已经指定来自 IdentityUser&lt;TKey&gt; 的现有 Id 属性将是 Guid 类型及其已经配置为key等。

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 2021-09-03
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多