2009-06-22 38 views
6

我們使用ASP.Net成員資格提供(SQL Server提供),我希望能夠建立一個管理員用戶帳戶作爲我們的安裝程序的一部分。爲此,我需要配置ASP.Net成員資格提供程序,以便我的安裝程序可以使用它 - 但我不想爲安裝程序設置配置文件。如何通過代碼配置ASP.Net成員資格提供程序?

那麼,有沒有配置通過代碼一個ASP.Net成員資格,而無需編寫自定義提供的一種方式?

回答

7

好了,該解決方案如下他們編造了這裏: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服務器地址和端口名稱不是'直到有人將他們輸入進去時才知道失速的嚮導,這將這樣的伎倆..

這是否幫助?

+0

這幾乎是我來到到底。這是我們不得不使用反射爲了得到這個工作:-(設置私有成員一個恥辱 – 2009-09-16 10:37:20

-1

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文件中的連接字符串別無他法。如果你想太是從代碼,你需要繼承類

+0

他在尋找一種方式來指定通過代碼連接字符串.. – cbeuker 2009-09-15 22:17:30

相關問題