Как получить элемент местоположения веб-конфигурации? - PullRequest
5 голосов
/ 11 ноября 2010

Как получить элемент местоположения веб-конфигурации?

ConfigurationManager.GetSection("appSettings") returns Okay

ConfigurationManager.GetSection("location") return null

IE ...

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

Ответы [ 5 ]

6 голосов
/ 11 ноября 2010

Помогает ли это?

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

Взято из здесь

4 голосов
/ 23 июля 2012

Я бы хотел улучшить ответ Нила: многие говорят, что изменение вашего web.config во время выполнения не рекомендуется.Но вот код, как это сделать.

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

Это может быть некрасивый код, но наверняка он будет работать. - Ян Рассел 'Расти Программист' Калачан

4 голосов
/ 15 февраля 2012

Не уверен, что это именно то, что вам нужно, но вы можете получить разделы внутри элемента местоположения web.config, например ...

AuthorizationSection pageAuthorizationSection = (AuthorizationSection)WebConfigurationManager.GetSection("system.web/authorizati‌​on", "FOLDER/Page2.aspx");
1 голос
/ 11 ноября 2010

Причина, по которой вы получаете сообщение об ошибке, заключается в том, что в .NET, раздел конфигурации пользовательского приложения (например, раздел «location» в вашем примере) требует, чтобы вы предоставили обработчик раздела настраиваемой конфигурации.

Основной используемый интерфейс: IConfigurationSectionHandler

Вот статья MSDN о том, как создать обработчик пользовательской конфигурации .

0 голосов
/ 11 ноября 2010

это потому, что appSettings - это известный (по умолчанию) раздел конфигурации в приложении .NET.Если вы хотите использовать свой собственный раздел конфигурации, вам нужно создать его .

...