從 Web.Config 獲取 MembershipProvider 的屬性 (Get MembershipProvider's Properties from Web.Config)


問題描述

從 Web.Config 獲取 MembershipProvider 的屬性 (Get MembershipProvider's Properties from Web.Config)

I derived a class from MembershipProvider in System.Web.Security with the following definition:

   public class RedditMembershipProvider : MembershipProvider
    {

        public RedditMembershipProvider()
        {

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

The issue is I want when the RedditMembershipProvider  is instantiated, I want all the properties to be read from the web.config, not from the code definition above:

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

So when I call the PasswordAttemptWindow from the View, I should get 20, not 10. But now I am getting 10, not 20.

Any idea how to solve this problem?


參考解法

方法 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;
        }
    }

    ...
}

Edit: typo.

方法 2:

Silly me! How can I make this kind of mistake?

I just need to read web.config in my code to get the value out

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

An even easier way is to inherit the RedditMembershipProvider from SqlMembershipProvider and override only necessary details. 

方法 3:

The answer 1 is elegant way. For example to read property minRequiredPasswordLength use

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);
}

and then

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

(by Gravitoneu-ge-neGravitonrosta)

參考文件

  1. Get MembershipProvider's Properties from Web.Config (CC BY-SA 3.0/4.0)

#asp.net-membership #asp.net-mvc






相關問題

更改會員等級時區 (change membership class time zone)

將 AspNetSqlMembershipProvider 用戶遷移到 WebMatrix (Migrate AspNetSqlMembershipProvider users to WebMatrix)

Beberapa aplikasi dengan keanggotaan dan nama aplikasi yang sama (Multiple applications with membership and same applicationName)

簡單的會員管理帳戶 (Simple Membership Admin Accout)

如何設置 RIA 服務以使用現有的 ASP.Net 成員基礎 (How to setup RIA Services to use an existing ASP.Net membership base)

具有多個數據庫或提供程序的 MVC4 簡單成員身份驗證 (MVC4 Simple Membership authentication with multiple databases or providers)

班級設計決策 (Class design decision)

從 Web.Config 獲取 MembershipProvider 的屬性 (Get MembershipProvider's Properties from Web.Config)

會員 API WP7 (Membership API WP7)

模擬會員 (Mocking Membership)

如何使用 LINQ 和 ASP.NET MVC 持久化用戶與其關聯的數據庫? (How do I persist which database a user is associated with it using LINQ and ASP.NET MVC?)

關於在 Web 應用程序中使用 ASP.NET 安全性和成員資格 (About using ASP.NET security and Membership in web applications)







留言討論