如何获取web配置位置元素?

如何获取web配置位置元素?

ConfigurationManager.GetSection("appSettings") returns Okay ConfigurationManager.GetSection("location") return null 

IE …

  ...  

您收到错误的原因是因为在.NET中,自定义应用程序配置部分(例如示例中的“位置”部分)要求您提供自定义配置部分处理程序。

您需要使用的主界面是IConfigurationSectionHandler

这是一篇关于如何创建自定义配置处理程序的MSDN文章。

这有帮助吗?

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

从这里开始

不确定这是否正是您想要的,但您可以在web.config位置元素中获取部分,如此…

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

我想改进Neil的答案:许多人说不建议在运行时修改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 accesslist = new List(); 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 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 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"); } 

这可能是一个丑陋的代码,但肯定它会工作。 – Jan Russel’Rusty Programmer’Clachan

这是因为appSettings是.NET应用程序中的已知(默认)配置部分。 如果要使用自己的配置部分,则必须创建它 。