从代码 C# 更改 Web.Config 中的 URL 重写规则

Posted

技术标签:

【中文标题】从代码 C# 更改 Web.Config 中的 URL 重写规则【英文标题】:Change URL Rewrite Rule in Web.Config from Code C# 【发布时间】:2012-05-31 21:50:31 【问题描述】:

我想从 C# 代码修改重写规则。 Url Rewrite 规则位于 web.config 文件中。

<system.webServer>
    <rewrite>
      <rules>
        <rule name="partners">
          <match url="^partners$" />
          <action type="Rewrite"
                  url="partners.aspx" />
        </rule>
        <rule name="news">
          <match url="^news$" />
          <action type="Rewrite"
                  url="news.aspx" />
        </rule>
        <rule name="projects">
          <match url="^projects$" />
          <action type="Rewrite"
                  url="projects.aspx" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

我想换前任。 &lt;rule name="partners"&gt; &lt;match url="^partners$" /&gt;&lt;rule name="partners"&gt; &lt;match url="^friendship/partners$" /&gt;

如何找到节点规则并将匹配 url 更新为“new one” where name = "partners";?

这是我对动态 url 重写的想法。感谢您提供任何其他方式。

【问题讨论】:

您想从同一个 Web 应用程序或其他应用程序中修改这些规则?您是否知道如果您修改 web.config 应用程序将被回收? 在同一个应用程序中……你说不可能?谢谢 我可以在任何 page_event 中配置 Web.Config 吗?前任。 Page_Init()? 是的,但这会杀死你的应用程序。 更好的解决方案是更改您的应用程序,以便它可以接受可变 URL,例如使用ASP.NET URL routing 将所有参数传递给您的应用程序。修改 web.config 有很多缺点,如果您进行多次重写,最终可能会遇到扩展问题。 【参考方案1】:

我在我的 web.config 网站中使用以下代码更改 connectionString 的值:

也许这个例子可以帮助你(只需将值 connectionString 更改为 system.webServeradd 更改为 rules 等。 请告诉我它是否适合你

XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load("../myPath/web.config");
foreach (XmlNode node in myXmlDocument["configuration"]["connectionStrings"])

    if (node.Name == "add")
    
        if (node.Attributes.GetNamedItem("name").Value == "SCI2ConnectionString")
        
            node.Attributes.GetNamedItem("connectionString").Value = "new value";
        
    

【讨论】:

这不是一个合理的方法,因为每次重新保存 web.config 文件时网站都会关闭 是的,这将意味着杀死您的应用程序网站。每次更改 web.config 时,它都会重新启动网站,对不起。我会检查我们是否有其他解决方案;-) 考虑这个解决方案。我的另一个问题:***.com/questions/10812311/… 哇哦,完美!谢谢你 ;-) 我同意这是一个很好的文章的好解决方案【参考方案2】:

第一步:-下载urlrewrite2.exe Here

第 2 步:- 在 web.config 中编写逻辑

<system.webServer>
  <rewrite>
    <providers>
      <provider name="FileMap" type="FileMapProvider, Microsoft.Web.Iis.Rewrite.Providers, Version=7.1.761.0, Culture=neutral, PublicKeyToken=0545b0627da60a5f">
        <settings>
          <add key="FilePath" value="D:\j\branches\JuzBuzz\App_Data\rewriteurl.txt" />
          <add key="IgnoreCase" value="1" />
          <add key="Separator" value="," />
        </settings>
      </provider>
    </providers>
    <rules>
      <rule name="FileMapProviderTest" stopProcessing="true">
        <match url="(.*)" ignoreCase="false" />
        <conditions logicalGrouping="MatchAll">
          <add input="FileMap:R:1" pattern="(.+)" ignoreCase="false" />
        </conditions>
        <action type="Rewrite" url="C:1" appendQueryString="false" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

第三步:- 将.txt 文件放在 App_Code 文件夹或您在 web.config 中提供地址的其他地方,txt 文件将包含类似的数据

**technology,expert/search-expert.aspx?CatId=1

咨询-个人成长、专家/搜索专家.aspx?CatId=2**等**

【讨论】:

你好,你能更清楚第3步吗?任何例子【参考方案3】:

Microsoft 有 Microsoft.Web.Administration.dll 可以帮助您,但它需要管理员权限才能执行,

https://www.iis.net/learn/manage/scripting/how-to-use-microsoftwebadministration

它非常适合WinForms应用程序(如IIS管理器)来控制IIS服务器,但也可以用于其他类型的应用程序。

我确实有一个个人项目,它是一个自定义 MWA 实现,适用于某些非管理员案例。如果您对此感兴趣,请告诉我。

【讨论】:

以上是关于从代码 C# 更改 Web.Config 中的 URL 重写规则的主要内容,如果未能解决你的问题,请参考以下文章

[C#常用代码]类库中读取解决方案web.Config字符串

从 .NET 中的 app.config 或 web.config 读取设置

从Web.Config获取多个connectionStrings到字典c#没有循环

.Net(C#)通过代码修改保存AppConfig(Web.config)中SectionGroup配置项

C#项目 App.config 配置文件不同使用环境配置

如何在不更改web.config文件中的URL的情况下重定向域?