将重写规则从web.config复制到另一个

时间:2013-07-16 08:16:14

标签: c# iis web-config

我们计划制作一个c#脚本,以便自动将重写规则从一个web.config复制到另一个web.config。我们为每个客户提供了多个web.config,我们有一些常规的重写规则,有时需要更改。一般重写规则具有唯一的前缀,可将其标识为一般规则(而非客户特定的)。

我们想知道是否可以使用C#将规则从一个web.config复制到另一个web.config。只是从一个配置中读取重写url / match url以将其写入另一个配置可能并不总能完成这项工作;例如,我们有时需要添加条件。

有没有办法做到这一点?我们希望尽可能地自动化它。我不是最好的c#,但我想可能有可能从一个文件读取整个规则并将其粘贴到另一个文件中?或者通过XMLReader解析web.config文件然后复制规则可能会更好吗?

1 个答案:

答案 0 :(得分:0)

我能够通过使用XML而不是ServerManager类来解决这个问题。这几乎是我想要的。

XmlDocument doc1 = new XmlDocument();
doc1.Load(@"web.new.config");

XmlDocument doc2 = new XmlDocument();
doc2.Load(@"web.config");

XmlNode rules = doc2.SelectSingleNode("/configuration/system.webServer/rewrite/rules");
XmlNodeList baserules = doc2.SelectNodes("/configuration/system.webServer/rewrite/rules/rule[contains(@name, 'GenericPrefix')]");

XmlNodeList ruleList = doc1.SelectNodes("/configuration/system.webServer/rewrite/rules/rule[contains(@name, 'GenericPrefix')]");

foreach(XmlNode baseruleOld in baserules)
{
    baseruleOld.ParentNode.RemoveChild(baseruleOld);
}

foreach(XmlNode rule in ruleList)
{
    XmlNode tocopynode = doc2.ImportNode(rule, true);
    rules.AppendChild(tocopynode);
}

doc2.Save("web.config");