Il seguente codice di esempio C# dimostra come configure a .NET membership provider programmatically per Jacques L. Chereau. Questo codice richiede che si anche configure a connection string nominato MyDatabase
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);
Supponendo di avere i seguenti riferimenti di libreria:
using System.Web.Security;
using System.Collections.Specialized;
using System.Reflection;
EDIT:
Questo metodo imposta la stringa di connessione nei provider Membership presto sufficiente nel ciclo di vita della richiesta
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);
}
Non testato ma chiamando questo metodo da Global.asax.cs all'interno di Application_PreRequestHandlerExecute
fa il lavoro.
Ma come impostare la stringa di connessione? ho bisogno di fare riferimento alla stringa di connessione dal codice non nel web.config, voglio dire che ho bisogno dell'appartenenza per leggere la stringa di connessione dal codice non dal file web.config. Quindi dal tuo codice non riesco a trovare come è supportata la stringa di connessione per l'appartenenza? Non ho bisogno di scrivere la stringa di connessione nel web.config – Ahmy
Ho modificato la mia risposta per includere il metodo – chridam
Grazie troppo funziona correttamente come ho desiderato grazie ancora. – Ahmy