我們使用ASP.Net成員資格提供(SQL Server提供),我希望能夠建立一個管理員用戶帳戶作爲我們的安裝程序的一部分。爲此,我需要配置ASP.Net成員資格提供程序,以便我的安裝程序可以使用它 - 但我不想爲安裝程序設置配置文件。如何通過代碼配置ASP.Net成員資格提供程序?
那麼,有沒有配置通過代碼一個ASP.Net成員資格,而無需編寫自定義提供的一種方式?
我們使用ASP.Net成員資格提供(SQL Server提供),我希望能夠建立一個管理員用戶帳戶作爲我們的安裝程序的一部分。爲此,我需要配置ASP.Net成員資格提供程序,以便我的安裝程序可以使用它 - 但我不想爲安裝程序設置配置文件。如何通過代碼配置ASP.Net成員資格提供程序?
那麼,有沒有配置通過代碼一個ASP.Net成員資格,而無需編寫自定義提供的一種方式?
好了,該解決方案如下他們編造了這裏:http://forums.asp.net/p/997608/2209437.aspx
我創建(你需要),在無參數的構造函數的類只是從命令行參數中獲取服務器和端口。這樣我可以去「MembershipInitializer.exe‘SomeSqlServer \實例’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);
}
}
在您的控制檯應用程序的的app.config(或Windows應用程序)
<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
如果您正在創建一個程序,以自動將您的成員資格數據庫初始化爲基於特定狀態但sql服務器地址和端口名稱不是'直到有人將他們輸入進去時才知道失速的嚮導,這將這樣的伎倆..
這是否幫助?
Membership.ApplicationName = "yourfbaApplicationame"; MembershipUser user = Membership.CreateUser("admin,"password","[email protected]");
,並確保你在配置文件中的以下條目。
<connectionStrings>
<add connectionString="server=sqd01-1-cll;database=FBA;Integrated Security=SSPI;" name="FBASqlConnString" providerName="System.Data.SqlClient"/>
如果你仍然想使用完整的代碼和不需要使用配置文件。使用以下內容
SqlMembershipProvider ObjSqlMembershipProvider = new SqlMembershipProvider();
SqlRoleProvider ObjSqlRoleProvider = new SqlRoleProvider();
NameValueCollection ObjNameValueCollRole = new NameValueCollection();
NameValueCollection ObjNameValueCollMembership = new NameValueCollection();
MembershipCreateStatus enMembershipCreateStatus;
ObjNameValueCollMembership.Add("connectionStringName", "Connection String Name");
ObjNameValueCollMembership.Add("applicationName", "ApplicatioNAme");
//these items are assumed to be Default and dont care..Should be given a look later stage.
ObjNameValueCollMembership.Add("enablePasswordRetrieval", "false");
ObjNameValueCollMembership.Add("enablePasswordReset", "false");
ObjNameValueCollMembership.Add("requiresQuestionAndAnswer", "false");
ObjNameValueCollMembership.Add("requiresUniqueEmail", "false");
ObjNameValueCollMembership.Add("passwordFormat", "Hashed");
ObjNameValueCollMembership.Add("maxInvalidPasswordAttempts", "5");
ObjNameValueCollMembership.Add("minRequiredPasswordLength", "1");
ObjNameValueCollMembership.Add("minRequiredNonalphanumericCharacters", "0");
ObjNameValueCollMembership.Add("passwordAttemptWindow", "10");
ObjNameValueCollMembership.Add("passwordStrengthRegularExpression", "");
//hard coded the Provider Name,This function just need one that is present. I tried other names and it throws error. I found this using Reflector ..all the rest are take care by the above
//name value pairs
ObjSqlMembershipProvider.Initialize("AspNetSqlMembershipProvider", ObjNameValueCollMembership);MembershipUser user = ObjSqlMembershipProvider.CreateUser("admin,"password","[email protected]");
其中一個你需要給Config文件中的連接字符串別無他法。如果你想太是從代碼,你需要繼承類
他在尋找一種方式來指定通過代碼連接字符串.. – cbeuker 2009-09-15 22:17:30
這幾乎是我來到到底。這是我們不得不使用反射爲了得到這個工作:-(設置私有成員一個恥辱 – 2009-09-16 10:37:20