0

我在将 Dictionary 对象中的数据传递给自定义 ExtendedMembershipProvider 中的 CreateUserAndAccount 方法时遇到问题。在我的帐户控制器中,(发布)注册方法具有以下内容:

Dictionary<string, object> userInfo = new Dictionary<string, object>();

userInfo.Add("Email", model.Email);
userInfo.Add("PasswordQuestion", model.PasswordQuestion);
userInfo.Add("PasswordAnswer", model.PasswordAnswer);

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, userInfo, true);

其中填充了 userInfo 并成功调用了我的自定义提供程序中的 CreateUserAndAccount 方法。

我有两个——也许是相互关联的——问题。

首先,方法签名不一样,provider方法如下:

public override string CreateUserAndAccount(string userName, string password, bool requireConfirmation, IDictionary<string, object> values) 

Boolean和Dictionary参数切换了,但是还是达到了方法。如果我更改 Account/Register 方法中的代码以匹配此代码,我会得到:

WebMatrix.WebData.WebSecurity.CreateUserAndAccount(string, string, object, bool)' 的最佳重载方法匹配有一些无效参数。

我很困惑这是怎么发生的,我的问题基本上是到底发生了什么?

其次,当代码到达 CreateUserAndAccount 时,我传递给它的 Dictionary 对象已经转换为 RouteValueDictionary,所有其他参数都按预期出现。

如何将我的 Dictionary 对象取出并访问 Email、PasswordQuestion 和 PasswordAnswer 值?

4

1 回答 1

1

静态WebSecurity.CreateUserAndAccount方法的签名ExtendedMembershipProvider.CreateUserAndAccount方法的签名不匹配。您不能使用另一种方法的签名调用一种方法,这就是您在尝试时遇到编译器错误的原因。

类上的方法将参数WebSecurity显式转换为 a ,因为它旨在接受任何对象,而该方法需要一个参数。propertyValuesRouteValueDictionaryExtendedMembershipProviderIDictionary<string, object>

例如,您可以传入一个匿名对象,并且调用仍然有效:

WebSecurity.CreateUserAndAccount(model.UserName, model.Password,
   new { model.Email, model.PasswordQuestion, model.PasswordAnswer },
   true);
于 2013-06-21T17:07:25.897 回答