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

标签 c# asp.net asp.net-membership windows-installer

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

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

最佳答案

好的,按照他们在这里想到的解决方案: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);
  }
}

在您的控制台应用程序(或 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>

如果您也需要角色提供者位,您可能必须以几乎相同的方式覆盖 SqlRoleProvider。

如果您正在创建一个程序来自动将您的成员(member)数据库初始化为一个特定的状态,但是直到有人将它们输入到安装向导中,sql server 地址和端口名称才为人所知,这将起到作用..

这有帮助吗?

关于c# - 如何通过代码配置 ASP.Net 成员资格提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1026079/

相关文章:

c# - 自定义异步 HTTP 处理程序仅在 IIS 7.5 集成模式下生成错误 500 - 为什么?

c# - 跨线程隐藏方法

c# - Windows Phone 8 - 下载 html 代码不等待

object - 如何使用 MS 角色和成员资格设计用户对象模型

c# - 指定的成员资格提供商名称无效。参数名称 : providerName

c# - 实现 Rx 处理程序的最佳实践是什么?

javascript - 将 Razor 列表传递给 Javascript (JSON)

asp.net - Ninject 在 Web 服务中注入(inject)服务接口(interface)

c# - Membership.GetUser(username) - 如何返回正确的大小写?

c# - 如何在ListView中插入超链接