Dictionary オブジェクトのデータをカスタム ExtendedMembershipProvider の CreateUserAndAccount メソッドに渡す際に問題が発生しています。私の Account コントローラーでは、(Post) Register メソッドに次のものが含まれています。
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 メソッドが正常に呼び出されます。
問題が 2 つあります。接続されている可能性があります。
まず、メソッドのシグネチャが同じではありません。プロバイダー メソッドは次のようになります。
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 の値にアクセスするにはどうすればよいですか?