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

本文关键字:写回 web config | 更新日期: 2023-09-27 18:18:19

在我的网页。配置文件,我有下面的部分,

<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

重要提示:改变网络。配置文件通常会导致应用程序重新启动。

如果你的应用程序需要灵活的设置,那么你应该考虑另一种方法…比如使用路由或自定义httphandler,从XML文件或DB中读取/写入数据。

下面是一些可能在处理配置文件时会派上用场的东西:

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