2010-11-11 15 views
5

Jak uzyskać element lokalizacji internetowej?Jak uzyskać element lokalizacji internetowej?

ConfigurationManager.GetSection("appSettings") returns Okay 

ConfigurationManager.GetSection("location") return null 

I.E. ...

<location path="FOLDER/Page2.aspx"> 
... 
</location> 
+0

To może pomóc, jeśli można przenieść całą zawartość pliku konfiguracyjnego. –

Odpowiedz

1

Powód pojawi się błąd o to dlatego, że w .NET, sekcja zwyczaj app config (takich jak części „lokalizacji” na swoim przykładzie) wymagają, aby zapewnić zwyczaj Sekcja obsługi konfiguracji.

Główny interfejs trzeba użyć jest IConfigurationSectionHandler

Oto artykuł MSDN na jak stworzyć swój custom configuration handler.

5

Czy to pomaga?

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ConfigurationLocationCollection myLocationCollection = config.Locations; 
foreach (ConfigurationLocation myLocation in myLocationCollection) 
{ 
    Console.WriteLine("Location Path: {0}", myLocation.Path); 
    Configuration myLocationConfiguration = myLocation.OpenConfiguration(); 
    Console.WriteLine("Location Configuration File Path: {0}",    myLocationConfiguration.FilePath); 
} 
Console.WriteLine("Done..."); 
Console.ReadLine(); 

Zrobione z here

+1

To będzie działać dla samodzielnych plików wykonywalnych, tj. Odczytu z app.config, ale nie będzie działać dla web.config. W takim przypadku pierwszą linię należy zastąpić 'Konfiguracja config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration (" ~ ");' –

0

to dlatego appSettings jest znana (domyślnie) sekcja config w aplikacji .NET. Jeśli chcesz użyć własnej sekcji konfiguracji, musisz create it.

4

Nie wiem, czy to jest dokładnie to, co chcesz, ale można dostać sekcje wewnątrz elementu lokalizacji web.config jak tak ...

AuthorizationSection pageAuthorizationSection = (AuthorizationSection)WebConfigurationManager.GetSection("system.web/authorizati‌​on", "FOLDER/Page2.aspx"); 
4

Chciałbym poprawić odpowiedź Neila: Wielu powie, że modyfikowanie pliku web.config w czasie wykonywania nie jest zalecane. Ale oto kod, jak to zrobić.

//The path where the web.config file is located 
    string path = "~/Administrator/"; 

    //Collections of aspx page names separated by a comma. 
    //Example content in a textbox: Default.aspx,Audit.aspx, 

    string strPages = txtPages.Text; 

    //This is string array where we are going to break down all name of aspx pages 
    //contained in strPages variable 

    string[] cdrPages = strValues.Split(','); 

    //This is the list where we are going to transfer the names of our aspx pages 
    //for faster searching of existing items 

    List<string> accesslist = new List<string>(); 


    try 
     { 
      //1. Create Role 
      System.Web.Security.Roles.CreateRole(this.txtRoleName.Text); 

      //2. Open the Web Configuration --> make sure that you put the correct folder location of your web.config file 
      System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(path); 

      //3. Get All Specified Locations 
      ConfigurationLocationCollection myLocationCollection = config.Locations; 

      //4. Transfer the values of string[] strPages to List<string> accessList 
      for (int i = 0; i < strPages.Length; i++) 
      { 
       if (strPages[i].ToString() != null && strPages[i].ToString() != "") 
       { 
        accesslist.Add(strPages[i].ToString()); 
       } 
      } 

      //5. Loop through the LocationCollections 
      foreach (ConfigurationLocation myLocation in myLocationCollection) 
      { 
       //6. Checks if myLocation exists in List<string> accessList 
       bool exists = accesslist.Exists(element => element == myLocation.Path); 

       //If Exists 
       if (exists) { 

        //7. Open the configuration of myLocation 
        System.Configuration.Configuration sub = myLocation.OpenConfiguration(); 

        //8. Get the authorization section of specific location 
        AuthorizationSection section = (System.Web.Configuration.AuthorizationSection)sub.GetSection("system.web/authorization"); 

        //9. Declare the Authorization Rule, in this case, we are allowing a new role to have an access to a specific page 
        AuthorizationRule autho = new System.Web.Configuration.AuthorizationRule(System.Web.Configuration.AuthorizationRuleAction.Allow); 

        //10. Add the New Role to Authorization Section 
        autho.Roles.Add(this.txtRoleName.Text); 
        section.Rules.Add(autho); 

        //11. Save the "sub", or the specific location inside the web.config file. 
        sub.Save(); 
       } 
      } 
       message.InnerHtml = "Role Successfully Added!"; 
       message.Attributes.Add("class", "msg_info"); 
     } 
     catch { 
       message.InnerHtml = "Saving Failed"; 
       message.Attributes.Add("class", "msg_error"); 
     } 

To może być brzydki kod, ale na pewno zadziała. - Jan Russel "Rusty programisty Calachan

Powiązane problemy