Csharp/C#教程:从代码动态设置成员资格的连接字符串分享


从代码动态设置成员资格的连接字符串

我有一个.net Web应用程序,它使用会员资格进行用户validation。 成员资格在web.config文件中有一个定义并引用文件中的连接字符串(web.config),我需要在web.config中动态地设置代码的成员关系的连接字符串不是静态的。

我怎样才能做到这一点?

提前致谢。

以下C#示例代码演示了如何通过Jacques L. Chereau以 编程方式配置.NET成员资格提供程序 。 此代码要求您还配置名为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)(?=.*[az])(?=.*[AZ])(?=.*[!@#$%^&*()_+}{\":;'?/>.<,])(?!.*\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); 

假设您有以下库引用:

 using System.Web.Security; using System.Collections.Specialized; using System.Reflection; 

编辑:

此方法在请求的生命周期中尽早设置成员资格提供程序中的连接字符串

 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); } 

未经测试但从Application_PreRequestHandlerExecute中的Global.asax.cs调用此方法可以完成这项工作。

有一个更简单的解决方案。

上述就是C#学习教程:从代码动态设置成员资格的连接字符串分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

  1. 创建一个扩展SqlMembershipProvider类的子类。
  2. 覆盖Initialize方法
  3. 设置connectionString属性config [“connectionString”]
  4. 让base.Initialize逻辑继续
  5. 在web.config文件中,使用您的自定义类而不是SqlMembershipProvider。 (如果你给它一个不同的免费精选名字大全,请确保设置defaultProvider属性以匹配它)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1034903.html

(0)
上一篇 2022年1月19日
下一篇 2022年1月19日

精彩推荐