无法在web.config中动态添加新规则
本文关键字:新规则 规则 添加 动态 web config | 更新日期: 2023-09-27 18:27:57
我在应用程序中应用了url重写,并在web.config中添加了一些规则作为
<modulesSection>
<rewriteModule>
<rewriteOn>true</rewriteOn>
<rewriteRules>
<rule source="About/About-Demo" destination="About/Demo.aspx"/>
</rewriteRules>
</rewriteModule>
</modulesSection>
现在我想从后面的代码中添加新规则。我使用了以下代码。。。
public void NEWTEST(string source, string destination)
{
XDocument xml = XDocument.Load( Path.Combine( Server.MapPath("~").ToString(), "web.config"));
if (!RuleExists(source, destination))
{
XElement elem = new XElement("rule");
elem.SetAttributeValue("source", source);
elem.SetAttributeValue("destination", destination);
xml.Element("rewriteRules").Add(elem); // Error occured
xml.Save(Path.Combine( Server.MapPath("~").ToString(), "web.config"));
}
}
public bool RuleExists(string source, string destination)
{
XDocument doc = XDocument.Load(Path.Combine(Server.MapPath("~").ToString(), "web.config"));
return doc.Descendants("rewriteRules").Elements()
.Where(e => e.Attribute("source").Value == source
&& e.Attribute("destination").Value == destination).Any();
}
但是在"xml.Element("rewriteRules").Add(elem);//发生错误"行,我得到了一个错误"System.NullReferenceException:对象引用未设置为对象的实例。"。请给我解决方案。这是创建新规则的正确方法吗?如果不是,请给我正确的方法。提前
我不确定使用xml修改配置文件是否可行。以下是我们的成果点击这里!
有预定义的类可以做到这一点。检查它们
以下代码对我有效..
public bool RuleExists(string source, string destination)
{
XDocument doc = XDocument.Load(Path.Combine(Server.MapPath("~").ToString(), "web.config"));
return doc.Descendants("rewriteRules").Elements()
.Where(e => e.Attribute("source").Value == source
&& e.Attribute("destination").Value == destination).Any();
}
public void DefineUrlRewrite(string source, string destination)
{
XDocument xml = XDocument.Load(Path.Combine(Server.MapPath("~").ToString(), "web.config"));
if (RuleExists(source, destination))
{
//element is already in the config file
//do something...
lblMsg.Text = "This Rule is already exists, choose another one!!! <br/>";
}
else
{
XElement elem = new XElement("rule");
elem.SetAttributeValue("source", source);
elem.SetAttributeValue("destination", destination);
xml.Descendants("rewriteRules").First().Add(elem);
xml.Save(Path.Combine(Server.MapPath("~").ToString(), "web.config"));
}
}