MembershipUser newUser = Membership.CreateUser(“jfewfewa801”,“r09gtrez30 @”)
上述声明返回“提供的电子邮件无效。”直到我设定 web.config中的requiresUniqueEmail =“false”。有没有办法创造 具有空电子邮件地址的用户,同时需要非空电子邮件 独特?
答案 0 :(得分:0)
有没有办法创建具有空电子邮件地址的用户,而所需的非空电子邮件是唯一的?
如果没有您使用某些自定义代码处理此问题,则无法实现,但我不推荐它:
您可以拥有数据库中未定义电子邮件的用户(复数!)
所以最后有几个用户使用相同的邮件(空或空)
答案 1 :(得分:0)
您是否使用 System.Web.Security.SqlMembershipProvider 作为提供程序?
方法调用的路径可能如下所示(从调用 CreateUser 方法开始,该方法仅从对象 System.Web.Security.Membership 接收两个参数) :
如果是,则 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进行回答。