मैं वर्तमान में एएसपीनेट के लिए कस्टम सदस्यता प्रदाता लिख रहा हूं और मेरी समस्या यह है कि मुझे नहीं पता कि कस्टम सदस्यता प्रदाता को पैरामीटर कैसे देना है उसी तरह से आप web.config फ़ाइल में मानक एएसपीनेट सदस्यता प्रदाताओं को पासवर्ड लंबाई की तरह देते हैं।एएसपी .Net कस्टम सदस्यता पैरामीटर web.config
उत्तर
जब आप 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;
}
}
यदि आपका प्रदाता MembershipProvider : ProviderBase
से प्राप्त होता है तो सभी कॉन्फ़िगरेशन लोड किए जाने चाहिए और लागू web.config लागू होना चाहिए।
कस्टम IPrincipal
और/या IIdentity
लागू करने पर विचार करें - यह कभी-कभी बेहतर एक्सटेंशन बिंदु होता है और चूंकि सभी को इसके बारे में पता नहीं होता है, इसका अक्सर उपयोग नहीं किया जाता है।
उसी तरह आप मानक .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>
यह वह जगह है 'बेस' को कॉल करने के बाद, मैंने अतीत में इसे कैसे किया है। आरंभ करें 'अपने शेष कॉन्फ़िगरेशन मानों को भरें, उपयुक्त डिफ़ॉल्ट सेट करें या अनिवार्य पैरामीटर को याद करने के लिए आवश्यक अपवाद फेंक दें। –