我们正在使用 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/