如何将更改后的值写回web.config?

How to write back the changed values to web.config?

在我的 web.config 文件中,我有以下部分,

<system.webServer>
    <rewrite>
      <rules>
        <rule name="rule 1D" stopProcessing="true">
          <match url="^(.*)$"  />
          <!--<action type="Rewrite" url="//offline.html"  />-->
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

现在我需要更改 stopProcessing 的值并将其写回 web.config。这是我到目前为止所做的

using System;
using System.IO;
using System.Linq;
using System.Web.UI;
using System.Xml.Linq;

namespace WebApplication3
{
    public partial class About : Page
    {        

        protected void btn1_Click(object sender, EventArgs e)
        {
            var configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");            
            var section = configuration.GetSection("system.webServer");
            var xdoc = XDocument.Load(new StringReader(section.SectionInformation.GetRawXml()));
            var dec = xdoc.Descendants("system.webServer");
            var stopProcessing = dec.Descendants("rules").SelectMany(i => i.Elements()).Select(s1 => s1.Attribute("stopProcessing")).Single().Value;
            stopProcessing = "false";
            configuration.Save();

        }
    }
}

但变化并未体现....

我做错了什么?

完成web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>  
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="rule 1D" stopProcessing="true">
          <match url="^(.*)$"  />
          <!--<action type="Rewrite" url="//offline.html"  />-->
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
  <system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Optimization" />
      </namespaces>
      <controls>
        <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
      </controls>
    </pages>
  </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" culture="neutral" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

重要提示: 更改 web.config 文件通常会导致应用程序重新启动。

如果您的应用程序需要灵活的设置,那么您应该考虑一种不同的方法...比如使用路由或自定义 HttpHandlers 和 read/write 来自 XML file/s 的数据或数据库

以下是处理配置文件时可能会派上用场的内容:

WebConfigurationManager.OpenWebConfiguration(HttpRuntime.AppDomainAppVirtualPath);
// "WebConfigurationManager" is located in the "System.Web.Configuration" namespace.