2012-12-21 16 views
6

Ich schreibe derzeit eine benutzerdefinierte Mitgliedschaft Provider für Asp. NET und das Problem, das ich habe, ist, dass ich nicht weiß, wie Sie die benutzerdefinierten Mitgliedschaft Provider in der geben Die gleiche Weise, die Sie den standardmäßigen .net-Mitgliedschaftsprovidern in der web.config-Datei wie der Passwortlänge geben.Asp. Net Benutzerdefinierte Mitgliedschaft Parameter von web.config

Antwort

5

Wenn Sie Ihre eigene Klasse von MembershipProvider leiten Sie die Initialize() Methode außer Kraft zu setzen haben, ist es nach der Unterzeichnung hat:

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

Die System.Collections.NameValueCollection ist ein Wörterbuch, in dem Sie die Optionen in der web.config Datei geschrieben finden. Diese Optionen werden auf dieselbe Weise angegeben wie Optionen für "Standard" -Anbieter (als Attribute). Jeder Wörterbucheintrag hat den Schlüssel des Attributnamens und als Wert den Wert des Attributs (wie string).

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

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

Wo, in meinem Beispiel GetBoolean() ist eine Erweiterung Methode irgendwo wie folgt erklärt:

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

Dies ist genau wie ich es in der Vergangenheit getan habe, nachdem Sie 'base.Initialize' aufgerufen haben, füllen Sie den Rest Ihrer Konfigurationswerte aus, setzen Sie geeignete Standardeinstellungen oder werfen Sie Ausnahmen, wie für fehlende obligatorische Parameter erforderlich. –

2

Wenn Ihr Provider von MembershipProvider : ProviderBase abgeleitet wird, dann sollte die gesamte Konfiguration von web.config geladen und angewendet werden.

Betrachten Sie die Implementierung von benutzerdefinierten IPrincipal und/oder IIdentity - es ist manchmal ein besserer Erweiterungspunkt und da nicht jeder davon bewusst ist, wird es oft nicht verwendet.

1

In gleicher Weise können Sie den Standard .net Mitgliedschaft definieren:

<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> 
Verwandte Themen