web.config 多个配置源
web.config Multiple config sources
我需要为重写 url 声明多个配置源,因为重写列表非常长(+10000 次重写)。
这行不通:
<rewrite>
<rules configSource="App_Config\Rewrite\UrlRewrites1.config"></rules>
<rules configSource="App_Config\Rewrite\UrlRewrites2.config"></rules>
</rewrite>
</system.webServer>
有以下例外:
Config section 'system.webServer/rewrite/rules' already defined.
Sections must only appear once per config file.
"configSource"只支持一个配置文件,默认不能有多个配置文件。对于 web.config.
中的节点,这会很顺利
我建议您尝试以编程方式进行。您可以使用 ServerManager class 来访问网站配置。您可能需要添加对 Microsoft.Web.Administration 的引用。阅读您的配置文件并手动添加每条规则。
像这样:
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetWebConfiguration("Default Web Site");
ConfigurationSection rulesSection = config.GetSection("system.webServer/rewrite/rules");
ConfigurationElementCollection rulesCollection = rulesSection.GetCollection();
ConfigurationElement ruleElement = rulesCollection.CreateElement("rule");
ruleElement["name"] = @"rule";
ConfigurationElement matchElement = ruleElement.GetChildElement("match");
matchElement["url"] = @"foo\.htm";
ConfigurationElement actionElement = ruleElement.GetChildElement("action");
actionElement["type"] = @"Rewrite";
actionElement["url"] = @"bar.htm";
rulesCollection.Add(ruleElement);
serverManager.CommitChanges();
}
还有另一种选择,但我自己没有尝试过。您可以为 url 重写模块编写自己的自定义重写提供程序。这是一个演练如何做到这一点:Custom Rewrite Provider Walkthrough
我需要为重写 url 声明多个配置源,因为重写列表非常长(+10000 次重写)。
这行不通:
<rewrite>
<rules configSource="App_Config\Rewrite\UrlRewrites1.config"></rules>
<rules configSource="App_Config\Rewrite\UrlRewrites2.config"></rules>
</rewrite>
</system.webServer>
有以下例外:
Config section 'system.webServer/rewrite/rules' already defined. Sections must only appear once per config file.
"configSource"只支持一个配置文件,默认不能有多个配置文件。对于 web.config.
中的节点,这会很顺利我建议您尝试以编程方式进行。您可以使用 ServerManager class 来访问网站配置。您可能需要添加对 Microsoft.Web.Administration 的引用。阅读您的配置文件并手动添加每条规则。
像这样:
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetWebConfiguration("Default Web Site");
ConfigurationSection rulesSection = config.GetSection("system.webServer/rewrite/rules");
ConfigurationElementCollection rulesCollection = rulesSection.GetCollection();
ConfigurationElement ruleElement = rulesCollection.CreateElement("rule");
ruleElement["name"] = @"rule";
ConfigurationElement matchElement = ruleElement.GetChildElement("match");
matchElement["url"] = @"foo\.htm";
ConfigurationElement actionElement = ruleElement.GetChildElement("action");
actionElement["type"] = @"Rewrite";
actionElement["url"] = @"bar.htm";
rulesCollection.Add(ruleElement);
serverManager.CommitChanges();
}
还有另一种选择,但我自己没有尝试过。您可以为 url 重写模块编写自己的自定义重写提供程序。这是一个演练如何做到这一点:Custom Rewrite Provider Walkthrough