扩展 IdentityUser 和自定义查询的 Web API

Posted

技术标签:

【中文标题】扩展 IdentityUser 和自定义查询的 Web API【英文标题】:Web API extending IdentityUser and custom queries 【发布时间】:2014-04-06 03:29:04 【问题描述】:

在 Web API 的 AccountController 中,我可以访问 UserManager,它提供了 GetUserById() 等方法。我需要根据我扩展的属性查询上下文并搜索用户列表 - 例如,我需要添加一个“GetUsersByPhoneNumber()”方法。

AppUser 是我的扩展类,继承了 IdentityUser。

我的构造函数看起来像这样。我在网上找到的任何示例都显示了与传入的上下文不同的内容。我看不到在哪里可以访问 dbcontext..

    public AccountController()
        : this(Startup.UserManagerFactory(), Startup.OAuthOptions.AccessTokenFormat)
    
    

    public AccountController(UserManager<AppUser> userManager,
        ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
    
        UserManager = userManager;
        AccessTokenFormat = accessTokenFormat;
    

我如何才能访问 dbcontext 并根据我添加到 AppUser 类的额外字段执行我自己的查询?

【问题讨论】:

【参考方案1】:

UserManager 意味着与存储无关,如果您挂在构造 UserManager 的 UserStore 本身上,您可以从 DbContext 本身下拉并访问东西。

由于工厂创建了您的用户管理器,您可能需要继承 UserManager 以公开访问默认受保护的 IUserStore。拥有商店后,您可以将其转换为 UserStore 并直接获取 DbContext。

另一种可能更简洁的方法是扩展 UserManager 并从 UserManager 本身公开一个新的 GetUsersByPhoneNumber(),因为它已经可以访问您需要的所有内容

【讨论】:

以上是关于扩展 IdentityUser 和自定义查询的 Web API的主要内容,如果未能解决你的问题,请参考以下文章

扩展 Sonata 用户包和自定义操作

JavaScript 使用.prototype扩展对象和自定义对象

User模型扩展和自定义

使用.prototype扩展对象和自定义对象

如何使用静态变量和自定义 getter 和 setter 在 SWIG 中扩展结构?

Gatsby:在自定义帖子类型上使用 GraphQL 查询和自定义分类