如何在Asp.Net中读取自定义.config文件?

时间:2011-06-10 21:54:23

标签: asp.net web-config configuration-files config

我的asp.net网站上有一个自定义配置文件,名为urls.config,其中包含简单的键值,仅用于重定向目的,现在我想以编程方式读取此文件并在此文件中添加值,我可以使用XMLTextReader和XMLDocument从此文件中读取值,但我无法在此文件中添加值。

任何帮助将不胜感激。 这是配置文件的结构:

<rewriteMaps>  
  <rewriteMap name="StaticRewrites" />  
  <add key="/superstars4012" value="/article.aspx?articleid=4012" />  
  <add key="/superstars4013" value="/article.aspx?articleid=4013" />  
  <add key="/superstars4014" value="/article.aspx?articleid=4014" />  
  <add key="/superstar" value="/article.aspx?articleid=4012" />  
</rewriteMaps>  

XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("urls.config"));
XmlElement element = doc.CreateElement("add");
element.SetAttribute("key", txtAddVanity.Text);
element.SetAttribute("value", "/article.aspx?articleid=4012");
doc.DocumentElement.AppendChild(element);
doc.Save(Server.MapPath("urls.config"));

如果文件扩展名是.xml,这种方法很有效,但是当我将其更改为.config时,我的要求是.config,因为重定向在.xml中不起作用

1 个答案:

答案 0 :(得分:1)

正如在这篇msdn帖子中雄辩地说的那样,在应用程序运行时修改web.config文件当然是可能的(因为它毕竟只是文本)但是在修改时会是一个非常糟糕的主意。配置文件将导致应用程序在服务器上重新启动 - 结束与当前用户的所有会话,并且所有新访问者都会看到错误页面,直到重新启动应用程序。当然不理想。

从代码的外观来看,

<add key="/superstar" value="/article.aspx?articleid=4012" />  

您正在将URL从静态网址重写为动态查询字符串。有更好的方法来实现这一点。一个是IIS模块“用户友好的URL”。我很少遇到使用这个模块无法解决的问题。

其逻辑如下:

  1. 用户输入“http://www.domain.com/page-this-or-that
  2. IIS有一个与该url模式匹配的正则表达式规则并捕获该URL
  3. 将用户定向到http://www.domain.com/page?id=page-this-or-that
  4. 您收到查询字符串并将其存储在字符串
  5. 然后执行数据库调用,检索并显示标题为“page-this-or-that”的数据库行
  6. 这对您的应用程序和用户来说更容易维护,也更安全。

    -Cheers!