【问题标题】:How to read custom .config file in Asp.Net?如何在 Asp.Net 中读取自定义 .config 文件?
【发布时间】:2011-06-10 21:54:22
【问题描述】:

我在我的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 中不起作用

【问题讨论】:

  • 您要添加值吗?您是否意识到修改 web.config 会卸载托管您的应用程序的应用程序域? web.config 用于应用程序的只读配置值。如果您想从应用程序中动态更新配置值,请使用数据库或其他东西。
  • 实际上我已经在 web.config 中定义了重写,只是为了单独的重定向文件,我已经指定了 并且所有的重定向都放在这个文件中...... .
  • @Abbas,这没关系。即使是用configSource 引用的外部文件也会被 ASP.NET 跟踪,修改它们与修改原始 web.config => 从内存中卸载应用程序域具有完全相同的效果。这是你想要的吗?
  • 我不想更新 web.config 文件,只需要更新包含上述键值的 urls.config 文件...
  • @Abbas,好吧,如果 web.config 和这个 urls.config 文件之间没有关系,那么只需使用 XmlReader 和 XmlWriter。但正如我所说,如果您使用configSource 从您的 web.config 中指向 urls.config,如果您修改 urls.config,您的应用程序将重新启动。

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


【解决方案1】:

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

从你的代码来看,

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

看来您正在将 url 从静态 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”的数据库行

这将更容易维护,并且对您的应用程序和用户来说更安全。

-干杯!

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    相关资源
    最近更新 更多