How get web config location element?

后端 未结 5 660
忘掉有多难
忘掉有多难 2021-01-19 00:06

How get web config location element?

ConfigurationManager.GetSection(\"appSettings\") returns Okay

ConfigurationManager.GetSection(\"location\") return null         


        
相关标签:
5条回答
  • 2021-01-19 00:35

    I'd like to improve Neil's answer: Many say that modifying your web.config at runtime is not recommended. But here's the code how to do it.

       //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");
            }
    

    This may be an ugly code, but for sure it'll work. - Jan Russel 'Rusty Programmer' Calachan

    0 讨论(0)
  • 2021-01-19 00:42

    Does this help?

    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();
    

    Taken from here

    0 讨论(0)
  • 2021-01-19 00:51

    The reason you get an error for that is because in .NET, the custom app config section (such as the "location" section in your example) require you to provide a custom configuration section handler.

    The main interface you need to use is IConfigurationSectionHandler

    Here is an MSDN article on how to create your custom configuration handler.

    0 讨论(0)
  • 2021-01-19 00:55

    Not sure if this is exactly what you want but you can get sections within the web.config location element like so...

    AuthorizationSection pageAuthorizationSection = (AuthorizationSection)WebConfigurationManager.GetSection("system.web/authorizati‌​on", "FOLDER/Page2.aspx");
    
    0 讨论(0)
  • 2021-01-19 00:59

    this is because appSettings is a known (default) config section in a .NET application. If you want to use your own config section, you have to create it.

    0 讨论(0)
提交回复
热议问题