如何使用C#修改IIS查询字符串限制?

slsn1g29  于 2023-10-19  发布在  C#
关注(0)|答案(1)|浏览(164)

我想更改IIS的全局配置,以便将查询字符串限制(默认值2048)更改为更高的值(如4096)。我知道如何实现它使用IIS管理器,但我想有C#代码,将这样做。我查看了全局配置的结构(C:\Windows\System32\inetsrv\configure\applicationHost.config),发现我需要创建或修改system.webServer/security/requestLimits/requestFiltering并将maxQueryString更改为4096。然而,每一次这样做的尝试都失败了。
对于下面的所有内容,appHostConfig是server.GetApplicationHostConfiguration,server是一个Servermanager,而server.commitchanges就位于下面。
我第一次尝试

ConfigurationSection rFSection = appHostConfig.GetSection("system.webServer/security/requestFiltering");
ConfigurationElementCollection rfCollection = rFSection.GetCollection();
ConfigurationElement rfElement = rfCollection.CreateElement("requestLimits");
rfElement["maxQueryString"] = "4096";
rfCollection.Add(rfElement);

但这引发了System.NullReferenceException Object reference not set to an instance of an object.
然后我试

ConfigurationSection rFSection = appHostConfig.GetSection("system.webServer/security/requestFiltering");
ConfigurationElement rfElement;
try
{
    rfElement = rFSection.GetChildElement("requestLimits");
} catch
{
    rfElement = rFSection.GetCollection().CreateElement("requestLimits");
}
rfElement["maxQueryString"] = "4096";
rFSection.GetCollection().Add(rfElement);

但这引发了System.InvalidCastException Specified cast is not valid.

我使用.NET 4.8

我现在不知道如何做到这一点,所以任何帮助都将不胜感激。先谢谢你了。

sg24os4d

sg24os4d1#

我解决了这个问题。当它是一个有属性的元素时,我把它当作一个集合来处理。这是代码:

ServerManager serverManager = new ServerManager();
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection section = config.GetSection("system.webServer/security/requestFiltering");
ConfigurationElement rlr = section.GetChildElement("requestLimits");
rlr.SetAttributeValue("MaxQueryString", 4096);
            
serverManager.CommitChanges();

这件事的寓意是:在浪费三个小时尝试使用配置原理图之前,

相关问题