从Web.Config获取MembershipProvider的属性

时间:2009-05-27 15:50:32

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

我从MembershipProvider中的System.Web.Security派生了一个类,其定义如下:

   public class RedditMembershipProvider : MembershipProvider
    {

        public RedditMembershipProvider()
        {

        }
        public override int PasswordAttemptWindow
        {
            get { return 10; }
        }
        /* snip all the similar properties definition
                 */
    }

问题是我想要实例化RedditMembershipProvider时,我希望从web.config中读取所有属性,而不是从上面的代码定义中读取:

<membership defaultProvider="RedditMembershipProvider">
<providers>
<clear/>
<add name="RedditMembershipProvider" 
     type="RedditClone.Models.RedditMembershipProvider"
     PasswordAttemptWindow=20
   />
</providers>
</membership>

所以当我从View中调用PasswordAttemptWindow时,我应该得到20,而不是10.但是现在我得到的是10,而不是20。

知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

public class YourMembershipProvider : MembershipProvider
{
    public override void Initialize(string name, NameValueCollection config)
    {
        if (!String.IsNullOrEmpty(config["yourValue"]))
        {
            _yourValue = config["yourValue"];
        }

        base.Initialize(name, config);
    }

    string  _yourValue;
    public override string YourValue
    {
        get
        {
            return _yourValue;
        }
    }

    ...
}

编辑:拼写错误。

答案 1 :(得分:0)

傻傻的我!我怎么能犯这种错误?

我只需要在我的代码中读取web.config以获取值

  public override int PasswordAttemptWindow
    {
        get { ConfigurationManager.AppSettings["membership"].value; }
    }

更简单的方法是从RedditMembershipProvider继承SqlMembershipProvider并仅覆盖必要的详细信息。

答案 2 :(得分:0)

答案1是优雅的方式。例如,要读取属性minRequiredPasswordLength使用

public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) {
    if (!String.IsNullOrEmpty(config["minRequiredPasswordLength"])) {
        _minRequiredPasswordLength = Int32.Parse(config["minRequiredPasswordLength"]);
    } 
    base.Initialize(name, config);
}

然后

public override int MinRequiredPasswordLength {
    get { return _minRequiredPasswordLength; }
}