如何通过代码配置ASP.Net成员资格提供程序?

Sam*_*ack 6 c# asp.net windows-installer asp.net-membership

我们正在使用ASP.Net成员资格提供程序(SQL Server提供程序),我希望能够将Admin用户帐户设置为安装程序的一部分.为此,我需要配置ASP.Net成员资格提供程序,以便我的安装程序可以使用它 - 但我不想为安装程序设置配置文件.

那么有没有一种方法可以通过代码配置ASP.Net成员资格而无需编写自定义提供程序?

cbe*_*ker 7

好的,按照他们在这里提出的解决方案:http://forums.asp.net/p/997608/2209437.aspx

我创建了一个类,在无参数构造函数(您需要)中只从命令行参数获取服务器和端口.这样我就可以去"MembershipInitializer.exe"SomeSqlServer\Instance"51000.

public class CustomSQLMembershipProvider : SqlMembershipProvider {
  private readonly string _server;
  private readonly string _port;

  /// <summary>
  /// Initializes a new instance of the <see cref="T:System.Web.Security.SqlMembershipProvider"/> class.
  /// </summary>
  public CustomSQLMembershipProvider() {
    string[] args = System.Environment.GetCommandLineArgs();
    // args[0] is the exe name
    _server = args[1];
    _port = args[2];
  }

  public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
  {
    base.Initialize(name, config);

    // Update the private connection string field in the base class.
    string connectionString = string.Format(@"Data Source={0},{1};Initial Catalog=aspnetdb;UID=NICCAMembership;PWD=_Password1;Application Name=NICCA;Connect Timeout=120;", _server, _port);

    // Set private property of Membership provider.
    FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
    connectionStringField.SetValue(this, connectionString);
  }
}
Run Code Online (Sandbox Code Playgroud)

在您的控制台应用程序(或Windows应用程序)的app.config中

<configuration>
 <connectionStrings>
  <clear/>
  <add name="MembershipDB"
    connectionString="Some Bogus String here that gets overrided in the custom class" 
    providerName="System.Data.SqlClient"/>
 </connectionStrings>
 <system.web>
  <authentication mode="Forms"/>
  <authorization>
   <deny users="?"/>
  </authorization>
  <membership>
   <providers>
    <remove name="AspNetSqlMembershipProvider"/>
    <add name="AspNetSqlMembershipProvider" 
      connectionStringName="MembershipDB" 
      applicationName="NICCA" 
      type="MyInitializeMembershipDB.CustomSQLMembershipProvider, MyInitializeMembershipDB" 
      requiresUniqueEmail="false" 
      requiresQuestionAndAnswer="false"/>
   </providers>
  </membership>
 </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

如果您还需要角色提供程序位,则可能必须以相同的方式覆盖SqlRoleProvider.

如果您正在创建一个程序来自动将您的成员资格数据库初始化为特定的状态,但是直到有人将它们输入到安装向导中才知道sql server地址和端口名称,这样做就可以了.

这有帮助吗?