如何覆盖createUser()ASP .NET Membership方法以显示自定义错误消息?

时间:2012-01-10 12:44:31

标签: asp.net asp.net-mvc asp.net-membership

如何覆盖createUser()会员方法以在密码检查失败时显示自定义错误消息?
我使用了网站管理工具,它提供了一个类似向导的界面来创建新用户。 (要启动此工具,请单击Microsoft Visual Studio中“网站”菜单上的“ASP.NET配置”)

Web.Config文件:

 <membership defaultProvider="MyMembershipProvider">
        <providers>
            <clear />
            <add name="MyMembershipProvider" type="BlueDDApp.Controllers.MyMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" minRequiredPasswordLength="8"  minRequiredNonalphanumericCharacters="0" passwordStrengthRegularExpression="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:])$"  passwordAttemptWindow="10" applicationName="/" />
        </providers>
    </membership>



自定义会员类::

    public class MyMembershipProvider : SqlMembershipProvider
{
    public MyMembershipProvider()
    {
        //Membership.ValidatingPassword += new MembershipValidatePasswordEventHandler(OnValidatePassword);
        ValidatingPassword += ValidatePassword;

    }
   /* public override MembershipUser CreateUser( string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
    {
        ValidatingPassword += ValidatePassword;

        return base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status);
    }*/
    void ValidatePassword(object sender, ValidatePasswordEventArgs e)
    {
        Regex check = new Regex("^(?i)(?!.*" + e.UserName + ").*$");
        if (!check.IsMatch(e.Password))
        {
            e.FailureInformation = new HttpException("blah blah");
            e.Cancel = true;

        }

    }
}

2 个答案:

答案 0 :(得分:0)

如果您使用的是asp:CreateUserWizard控件,我认为它是(它将从您的web.config连接到成员资格提供程序),然后:

在设计模式下,如果单击此控件,则在右上角有一个图标,一个箭头,您可以在其中选择“自定义创建用户步骤”选项。这将转换控件,将其扩展为内部使用的单独控件。现在,您可以访问错误消息(Literal控件)并将其更改为显示静态消息,或显示来自代码的动态更改消息。

您还可以向CreateUserWizard添加事件,如CreatingUser,CreateUserError和CreatedUser,它们可以让您自定义行为以及如何使用创建。

答案 1 :(得分:0)

以下是有关自定义MembershipUser的一个很好的示例:

Sample Membership Provider Implementation