来自web.config的Asp .Net Custom成员参数

时间:2012-12-21 09:03:44

标签: asp.net asp.net-membership

我目前正在为asp .net写一个自定义成员资格提供程序,而我遇到的问题是我不知道如何以与提供给标准asp相同的方式向自定义成员资格提供程序提供参数。 web.config文件中的网络成员资格提供程序,如密码长度。

3 个答案:

答案 0 :(得分:5)

当您从MembershipProvider派生自己的类时,必须覆盖Initialize()方法,它具有以下签名:

public override void Initialize(string name, NameValueCollection config);

System.Collections.NameValueCollection是一个字典,您可以在其中找到web.config文件中的选项。这些选项的指定方式与指定"标准"的选项相同。提供者(作为属性)。每个字典条目都具有属性名称的键,并且具有属性值(作为string)的值。

public  class MyMembershipProvider : MembershipProvider
{
    public override void Initialize(string name, NameValueCollection config)
    {
        base.Initialize(name, config);

        _enablePasswordReset = config.GetBoolean("enablePasswordReset", true);
    }
}

在我的示例中,GetBoolean()是一个在以下地址声明的扩展方法:

public static bool GetBoolean(this NameValueCollection config,
    string valueName, bool? defaultValue)
{
    object obj = config[valueName];
    if (obj == null)
    {
        if (!defaultValue.HasValue)
            throw new WarningException("Required field has not been specified.");

        return defaultValue.Value;
    }

    bool value = defaultValue;
    if (obj is Boolean)
        return (bool)obj;

    IConvertible convertible = obj as IConvertible;
    try
    {
        return convertible.ToBoolean(CultureInfo.InvariantCulture);
    }
    catch (Exception)
    {
        if (!defaultValue.HasValue)
            throw new WarningException("Required field has invalid format.");

        return defaultValue.Value;
    }
}

答案 1 :(得分:2)

如果您的提供者派生自MembershipProvider : ProviderBase,那么应该从web.config加载并应用所有配置。

考虑实施自定义IPrincipal和/或IIdentity - 它有时是一个更好的扩展点,因为不是每个人都知道它通常不会被使用。

答案 2 :(得分:1)

以同样的方式定义标准.net成员资格:

<membership defaultProvider="MyCustomMembershipProvider" userIsOnlineTimeWindow="30">
                <providers>
                    <clear />
                    <add name="MyCustomMembershipProvider" type="Namespace.MyCustomMembershipProvider" connectionStringName="db_ConnectionString" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="false" passwordFormat="Encrypted" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" />
                    <add name="StandardMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="db_ConnectionString" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Encrypted" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" />
                </providers>
    </membership>