Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Core 2.2如何重写UserManager.CreateAync以删除唯一用户名要求_C#_Asp.net Mvc_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# ASP.NET Core 2.2如何重写UserManager.CreateAync以删除唯一用户名要求

C# ASP.NET Core 2.2如何重写UserManager.CreateAync以删除唯一用户名要求,c#,asp.net-mvc,asp.net-core,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,我正在尝试重写UserManager.CreateAsync以删除唯一用户名的要求。我该怎么做 到目前为止,这就是我所拥有的 public class CustomUserManager : UserManager<User> { public string TenantId { get; set; } public CustomUserManager(IUserStore<User> store, IOptions<IdentityOptions&

我正在尝试重写UserManager.CreateAsync以删除唯一用户名的要求。我该怎么做

到目前为止,这就是我所拥有的

public class CustomUserManager : UserManager<User>
{
    public string TenantId { get; set; }
    public CustomUserManager(IUserStore<User> store, IOptions<IdentityOptions> optionsAccessor,
    IPasswordHasher<User> passwordHasher, IEnumerable<IUserValidator<User>> userValidators,
    IEnumerable<IPasswordValidator<User>> passwordValidators, ILookupNormalizer keyNormalizer,
    IdentityErrorDescriber errors, IServiceProvider services, ILogger<UserManager<User>> logger) : base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger)
    {
    }

    public override async Task<IdentityResult> CreateAsync(User user, string Password)
    {
        ThrowIfDisposed();
        user.TenantId = this.TenantId; 
        if (user == null)
        {
            throw new ArgumentNullException("user");
        }
        var result = dbContext.Users.Any(u => u.UserName == user.UserName && u.TenantId == user.TenantId);
        if (result == true)
        {
            return IdentityResult.Failed();
        }
        return await base.CreateAsync(user, Password);
    }
}
公共类CustomUserManager:UserManager { 公共字符串TenantId{get;set;} public CustomUserManager(IUserStore存储、IOOptions访问器、, IPasswordHasher密码hasher,IEnumerable用户验证程序, IEnumerable PasswordValidator、ILookupNormalizer、keyNormalizer、, IdentityErrorDescriber错误、IServiceProvider服务、ILogger记录器):基本(存储、选项访问器、密码哈希器、用户验证器、密码验证器、密钥规范化器、错误、服务、记录器) { } 公共重写异步任务CreateAsync(用户,字符串密码) { ThrowIfDisposed(); user.TenantId=this.TenantId; if(user==null) { 抛出新的ArgumentNullException(“用户”); } var result=dbContext.Users.Any(u=>u.UserName==user.UserName&&u.TenantId==user.TenantId); 如果(结果==真) { 返回IdentityResult.Failed(); } 返回wait base.CreateAsync(用户,密码); } } 由于我使用base.CreateAsync,无法强制创建用户。如何覆盖CreateSync正在执行的操作


我被这件事缠住了

请尝试设置dbContext.Configuration.ValidateOnSaveEnabled=false;查看它是否工作。

请尝试设置dbContext.Configuration.ValidateOnSaveEnabled=false;查看它是否工作。

您想要一个可以多次注册的用户名吗?这里有什么要求指南?如果是,使用相同的用户名登录哪个帐户?用户表中将有一个分开用户名的租户。您必须创建自己的用户存储和自定义用户对象。这样你就可以为整件事编写自己的逻辑。这将需要更多的工作。您是否也尝试过不调用base.CreateAsync并编写自己的逻辑?可能是不同的Net db,或者您将要求他们指定一个租户?看起来也许你最好在TenantId中过关,你会对如何实现这一愿景感兴趣。containt在DB上强制执行,因此您需要将其删除并添加一个新的containt以包含username和TenantId,然后createUser可能会为您处理,您需要验证。这是一个虚拟算法,但当您创建user时,您可以将TenantId映射到用户名,以便TenantId和Username列具有相同的值。是否希望用户名可以注册多次?这里有什么要求指南?如果是,使用相同的用户名登录哪个帐户?用户表中将有一个分开用户名的租户。您必须创建自己的用户存储和自定义用户对象。这样你就可以为整件事编写自己的逻辑。这将需要更多的工作。您是否也尝试过不调用base.CreateAsync并编写自己的逻辑?可能是不同的Net db,或者您将要求他们指定一个租户?看起来也许你最好在TenantId中过关,你会对如何实现这一愿景感兴趣。containt在DB上强制执行,因此您需要将其删除并添加一个新的containt以包含username和TenantId,然后createUser可能会为您处理,您需要验证。这是一个虚拟算法,但当您创建user时,您可以将TenantId映射到username,以便TenantId和username列具有相同的值。