2012-12-21 17 views
6

मैं वर्तमान में एएसपीनेट के लिए कस्टम सदस्यता प्रदाता लिख ​​रहा हूं और मेरी समस्या यह है कि मुझे नहीं पता कि कस्टम सदस्यता प्रदाता को पैरामीटर कैसे देना है उसी तरह से आप web.config फ़ाइल में मानक एएसपीनेट सदस्यता प्रदाताओं को पासवर्ड लंबाई की तरह देते हैं।एएसपी .Net कस्टम सदस्यता पैरामीटर web.config

उत्तर

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 लागू करने पर विचार करें - यह कभी-कभी बेहतर एक्सटेंशन बिंदु होता है और चूंकि सभी को इसके बारे में पता नहीं होता है, इसका अक्सर उपयोग नहीं किया जाता है।

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>