扩展UserManager,以通过自定义字段ASP.NET Core进行搜索



我添加了firstName,lastname,address,cardid等,以用于ASP.NET Core MVC应用程序的应用程序用户。

我希望能够添加其他功能以在Usermanager类中搜索该数据库,以根据这些其他属性搜索用户。

例如它已经包含用于通过名称(用户名(查找的功能

_userManager.FindByNameAsync("Mike123")

我希望能够通过cardid

找到用户对象
_userManager.FindByCardIDAsync("123456789")

或多个用户通过地址

_userManager.FindByAddressAsync("123 Fake St. Real Town, USA")

我已经成功使用了此功能

ApplicationUser User = _userManager.Users.FirstOrDefault(u => u.CardID == CardID);

我仍然想了解一种扩展该类别的方法,或者我应该自己创建自己并从中继承?

扩展方法呢?例如:

using System;
using System.Collections.Generic;
using System.Linq;
using ExampleProject.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
namespace ExampleProject
{
    public static class UserManagerExtensions
    {
        public static async Task<ApplicationUser> FindByNameAsync(this UserManager<ApplicationUser> um, string name)
        {
            return await um?.Users?.SingleOrDefaultAsync(x => x.UserName == name);
        }
        public static async Task<ApplicationUser> FindByCardIDAsync(this UserManager<ApplicationUser> um, string cardId)
        {
            return await um?.Users?.SingleOrDefaultAsync(x => x.CardID == cardId);
        }
        public static async Task<ApplicationUser> FindByAddressAsync(this UserManager<ApplicationUser> um, string address)
        {
            return await um?.Users?.SingleOrDefaultAsync(x => x.Address == address);
        }
    }
}

但是请注意,这是一个简单的示例,只有当名称/cardid/地址是唯一的...

时,才能正常工作。

我已经使用SingleOrDefaultAsync作为对姓名/cardid/地址不是唯一的情况的保护更好的标准,否则您将退还用户的集合?

相关内容

  • 没有找到相关文章

最新更新