我的站点中有一个 PasswordRecovery 控件。
我有自己的自定义类实现 MembershipProvider。
其中一种方法是 GetPassword,以用户名、答案作为参数。
它在用户输入问题的答案时被激活,并且该方法应检查答案是否正确。
据我了解,如果答案不正确,我应该抛出 MembershipPasswordException。
throw new MembershipPasswordException("MyMessage");
当我在调试模式下通过它时,VS(2005...) 给了我以下运行时错误
用户代码未处理 MembershipPasswordException
但在客户端,似乎一切都按计划进行,用户收到一条错误消息,指出无法验证答案。
那么为什么我会收到这个错误呢?无论如何都可以吗?
我究竟做错了什么?
谢谢
编辑,这是有问题的代码:
conn = GetConnection();
command = new SqlCommand("CustomMemProvider_GetPassword", conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("ApplicationID", ApplicationID));
command.Parameters.Add(new SqlParameter("UserName", username));
command.Parameters.Add(new SqlParameter("Answer", Encrypt(answer)));
SqlParameter pPassword = new SqlParameter("@Password", SqlDbType.NVarChar, 256);
pPassword.Direction = ParameterDirection.Output;
SqlParameter pStatusMessage = new SqlParameter("@StatusMessage", SqlDbType.NVarChar, 256);
pStatusMessage.Direction = ParameterDirection.Output;
command.Parameters.Add(pPassword);
command.Parameters.Add(pStatusMessage);
command.ExecuteNonQuery();
string passToDecrypt = Parse.ObjectToString(pPassword.Value);
if (passToDecrypt == String.Empty)
throw new MembershipPasswordException(Parse.ObjectToString(pStatusMessage.Value));
else
password = Decrypt(Parse.ObjectToString(passToDecrypt));