Der folgende C# -Beispielcode veranschaulicht, wie configure a .NET membership provider programmatically von Jacques L. Chereau. Dieser Code erfordert, dass Sie configure a connection string auch MyDatabase
genannt
NameValueCollection objConfig = new NameValueCollection();
objConfig.Add("connectionStringName", "MyDatabase");
objConfig.Add("enablePasswordRetrieval", "false");
objConfig.Add("enablePasswordReset", "true");
objConfig.Add("requiresQuestionAndAnswer", "true");
objConfig.Add("applicationName", "MyApp");
objConfig.Add("requiresUniqueEmail", "true");
objConfig.Add("maxInvalidPasswordAttempts", "5");
objConfig.Add("passwordAttemptWindow", "10");
objConfig.Add("commandTimeout", "30");
objConfig.Add("passwordFormat", "Hashed");
objConfig.Add("name", "AspNetSqlMembershipProvider");
objConfig.Add("minRequiredPasswordLength", "8");
objConfig.Add("minRequiredNonalphanumericCharacters", "2");
objConfig.Add("passwordStrengthRegularExpression", "(?=^.{8,25}$)(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[[email protected]#$%^&*()_+}{\\":;'?/>.<,])(?!.*\\s).*$"));
SqlMembershipProvider objSqlMembershipProvider = new SqlMembershipProvider();
objSqlMembershipProvider.Initialize(objConfig["name"], objConfig);
MembershipProviderCollection colMembershipProviders = new MembershipProviderCollection();
colMembershipProviders.Add(objSqlMembershipProvider);
colMembershipProviders.SetReadOnly();
BindingFlags enuBindingFlags = BindingFlags.NonPublic | BindingFlags.Static;
Type objMembershipType = typeof(Membership);
objMembershipType.GetField("s_Initialized", enuBindingFlags).SetValue(null, true);
objMembershipType.GetField("s_InitializeException", enuBindingFlags).SetValue(null, null);
objMembershipType.GetField("s_HashAlgorithmType", enuBindingFlags).SetValue(null, "SHA1");
objMembershipType.GetField("s_HashAlgorithmFromConfig", enuBindingFlags).SetValue(null, false);
objMembershipType.GetField("s_UserIsOnlineTimeWindow", enuBindingFlags).SetValue(null, 15);
objMembershipType.GetField("s_Provider", enuBindingFlags).SetValue(null, objSqlMembershipProvider);
objMembershipType.GetField("s_Providers", enuBindingFlags).SetValue(null, colMembershipProviders);
Angenommen, Sie folgende Bibliothek Referenzen haben:
using System.Web.Security;
using System.Collections.Specialized;
using System.Reflection;
EDIT:
Diese Methode die Verbindungszeichenfolge in den Membership-Provider setzt früh genug im Lebenszyklus der Anforderung
private void SetMembershipProviderConnectionString(string connectionString)
{
// Set private property of Membership. Untested code!!
var connectionStringField = Membership.Provider.GetType().GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
if (connectionStringField != null)
connectionStringField.SetValue(Membership.Provider, connectionString);
}
Nicht getestet, aber Aufruf dieser Methode von Global.asax.cs innerhalb Application_PreRequestHandlerExecute
erledigt den Job.
Wie wird die Verbindungszeichenfolge festgelegt? Ich muss auf Verbindungszeichenfolge vom Code beziehen, der nicht in der web.config ist, ich meine, dass ich die Mitgliedschaft brauche, um Verbindungszeichenfolge vom Code nicht von web.config-Datei zu lesen. Also von Ihrem Code kann ich nicht finden, wie wird die Verbindungszeichenfolge für die Mitgliedschaft unterstützt? Ich muss keine Verbindungszeichenfolge in der web.config schreiben – Ahmy
Ich habe meine Antwort bearbeitet, um die Methode – chridam
zu enthalten Dank zu viel funktioniert es richtig, wie ich wünschte, danke wieder. – Ahmy