Membership.CreateUser:提供的电子邮件无效

时间:2014-01-17 09:21:25

标签: asp.net asp.net-membership

MembershipUser newUser = Membership.CreateUser(“jfewfewa801”,“r09gtrez30 @”)

上述声明返回“提供的电子邮件无效。”直到我设定 web.config中的requiresUniqueEmail =“false”。有没有办法创造 具有空电子邮件地址的用户,同时需要非空电子邮件 独特?

2 个答案:

答案 0 :(得分:0)

  

有没有办法创建具有空电子邮件地址的用户,而所需的非空电子邮件是唯一的?

如果没有您使用某些自定义代码处理此问题,则无法实现,但我不推荐它:

您可以拥有数据库中未定义电子邮件的用户(复数!)

所以最后有几个用户使用相同的邮件(空或空)

答案 1 :(得分:0)

您是否使用 System.Web.Security.SqlMembershipProvider 作为提供程序?

方法调用的路径可能如下所示(从调用 CreateUser 方法开始,该方法仅从对象 System.Web.Security.Membership 接收两个参数) : enter image description here

如果是,则 System.Web.Security.SqlMembershipProvider 的CreateUser方法中的此逻辑可能是原因:

...
if (!SecUtility.ValidateParameter(ref email, this.RequiresUniqueEmail, this.RequiresUniqueEmail, false, 0x100))
        {
            status = MembershipCreateStatus.InvalidEmail;
            return null;
        }
...

ValidateParameter的工作方式如下:

internal static bool ValidateParameter(ref string param, bool checkForNull, bool checkIfEmpty, bool checkForCommas, int maxSize)
    {
        if (param == null)
        {
            return !checkForNull;
        }
        param = param.Trim();
        return ((!checkIfEmpty || (param.Length >= 1)) ? (((maxSize <= 0) || (param.Length <= maxSize)) && (!checkForCommas || !param.Contains(","))) : false);
    }
当电子邮件(参数)为空并且“ requiresUniqueEmail”(checkForNull)为TRUE时,

ValidateParameters返回 False

!在中((SecUtility.ValidateParameter(ref email,this.RequiresUniqueEmail,this.RequiresUniqueEmail,false,0x100))然后将计算为TRUE(!False)并且逻辑返回 NULL < / i>而不是执行以下SQL命令在该SqlMembershipProvider.CreateUser方法中创建用户(dbo.aspnet_Membership_CreateUser)

我正在使用.net 4.7.1进行回答。