ASP.NET Identity是默认的ApplicationUserManager实现IUserEmailStore吗?

时间:2015-11-10 21:54:21

标签: c# asp.net-mvc asp.net-identity

您好,

我在UserValidator中特别关注ASP.NET身份源。我想为自己的项目重写它,以便能够更改错误消息。所以我将该课程复制到我的项目中。当我尝试使用它时 - 我收到错误 - 'Microsoft.AspNet.Identity.UserManager<TUser,TKey>' does not contain a definition for 'GetEmailStore' and no extension method 'GetEmailStore' accepting a first argument of type 'Microsoft.AspNet.Identity.UserManager<TUser,TKey>' could be found (are you missing a using directive or an assembly reference?) 在这一行

var email = await Manager.GetEmailStore().GetEmailAsync(user).ConfigureAwait(false);

我的问题是 - 如何在AspNet.Identity框架中工作,但不能在我的项目中工作?看起来管理器正在实施IUserEmailStore

我测试的全部是VS2013中的默认MVC模板

1 个答案:

答案 0 :(得分:2)

我终于找到了答案(经过大量搜索后)。

如果您看到UserManager的源代码,GetEmailStore()方法确实存在,但是是内部的。看看:

    internal IUserEmailStore<TUser, TKey> GetEmailStore()
    {
        var cast = Store as IUserEmailStore<TUser, TKey>;
        if (cast == null)
        {
            throw new NotSupportedException(Resources.StoreNotIUserEmailStore);
        }
        return cast;
    }

因此,它只存在于自己的Identity程序集的文件中,这就是为什么它在那里工作而不是在你的代码中。

此外,您可以获得与以下相同的结果:

var email = await Manager.GetEmailAsync(user.Id).ConfigureAwait(false);

Click here to see UserManager's Source Code