Changing .net Membership ConnectionString

坚强是说给别人听的谎言 提交于 2019-12-24 11:34:56

问题


I need to change the connection string that the .net Membership API uses. Basically the API loads the connection string from app.config on the first time you are calling it.

Does anyone knows how can I dynamically tell the API to use a different connection string?

<system.web>
<membership defaultProvider="SqlProvider">
  <providers>
    <clear />
    <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MySqlConnection"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         passwordFormat="Hashed" maxInvalidPasswordAttempts="6545"
         minRequiredPasswordLength="4" minRequiredNonalphanumericCharacters="0"
         passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="RoleProvider">
  <providers>
    <add name="RoleProvider"
         type="System.Web.Security.SqlRoleProvider"
         connectionStringName="MySqlConnection" />
  </providers>
</roleManager>
</system.web>
<connectionStrings>
  <add name="MySqlConnection"
       connectionString=".." 
       providerName="System.Data.SqlClient" />
</connectionStrings> 

EDIT:

Solved - > Set connection string of membership dynamically from code


回答1:


You need to create your own custom membership provider code (this is not as complicated as it sounds). You need to provide a class that inherits from SqlMembershipProvider, and then add an overriden initialise method:

public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{
    // Get your new connnection string name and then overwrite the base here:
    config.Item["connectionStringName"] = "MyNewConnectionStringName";

    base.Initilize(name, config);
}

Then in your web.config, for the membership section, you need to put your new custom type in the 'type' attribute. This requires you to get your new connection string from the ConnectionStrings application section.

You may also need to also override the RoleProvider and the ProfileProvider depending on your requirements.

P.S. Code quickly translated on the fly from VB.net, apologies if there are a few syntax errors.


In the web.config, you must fully qualify your custom reference, something like (query from comments):

<add name="AspNetSqlMembershipProvider" 
type="zTester.tempMemebership, zTester, Version=1.0.0.0, Culture=neutral" ... etc


来源:https://stackoverflow.com/questions/21114512/changing-net-membership-connectionstring

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!