0

我个人觉得模糊的错误信息很痛苦。在我的新实践项目中,我试图向用户输入添加额外的验证。但是,ASP.NET MembershipCreateStatus有成员;例如,当使用CreateUser 方法时, InvalidEmail会处理其中一些区域。

在输入到达Membership.CreateUser Method之前,我可以对提交的电子邮件执行 if 语句或正则表达式。但是,我不确定从哪里开始:

我知道这个问题有点主观,但我不想以后发现有更好的方法,如果你刚刚开始,它可以成为救命稻草。

除了系统检查之外,我是否应该创建一个额外的验证方法来检查电子邮件中非常具体的格式错误。如您所见,错误消息没有说明为什么它无效。

也可以创建我自己的枚举,例如,电子邮件包含下划线,我可以将其附加到MembershipCreateStatus吗?如果有怎么办?

这是我的示例代码,缩写:

public string GetErrorMessage(MembershipCreateStatus status)
{

switch (status)
{

case MembershipCreateStatus.InvalidEmail:
return "The e-mail address provided is invalid.";

default:
return "Go to jail!!";
}
}

protected void btnSubmit_Click(object sender, EventArgs e)
{
try
{
Membership.CreateUser(txtUserName.Text, txtPassword.Text, txtEmail.Text);
}
catch (MembershipCreateUserException ex)
{
ltrStatusMsg.Text = GetErrorMessage(ex.StatusCode);
}
catch (HttpException ex)
{
ltrStatusMsg.Text = ex.Message;
}
}

谢谢我的朋友。

4

2 回答 2

1

给猫剥皮的方法有很多。当然,您可以在调用之前进行自己的验证Membership.CreateUser。您的验证方法可能会抛出一个MembershipCreateUserException并重用现有状态代码之一,或者抛出一个不同的异常。您抛出的异常可以是自定义异常,或者您可以重用现有的异常类型,例如ValidationException

try
{
    ValidateUser(txtUserName.Text, txtPassword.Text, txtEmail.Text);
    Membership.CreateUser(txtUserName.Text, txtPassword.Text, txtEmail.Text);
}
catch (MembershipCreateUserException ex)
{
    ltrStatusMsg.Text = GetErrorMessage(ex.StatusCode);
}
catch (ValidationException ex)
{
    ltrStatusMsg.Text = ex.Message;
}
catch (Exception ex)
{
    // log exception ...

    ltrStatusMsg.Text = "An unexpected error occurred while creating the user";
}

...
private void ValidateUser(...)
{
    if (... not valid ...) throw new ValidationException("some suitable message");
}
于 2013-05-23T06:49:56.050 回答
0

在我的 CustomMembershipProvider 中,我不使用 CreateUser 方法,我有一个 CreateUser 方法作为我的 User 业务对象代码的一部分,它带有一个带有各种无效(或有效)结果的输出参数(自定义枚举)。

于 2013-05-23T06:02:12.090 回答