如何用C#编程修改IIS查询字符串限制?
修改IIS全局requestFiltering的maxQueryString(C# .NET 4.8)
你之前的错误根源在于对requestFiltering节点结构的理解偏差——requestLimits是requestFiltering的直接子元素,而非集合中的项,所以不需要调用GetCollection()来操作它。
以下是正确的实现代码:
using Microsoft.Web.Administration; // 注意:程序必须以管理员权限运行 using (ServerManager server = new ServerManager()) { Configuration appHostConfig = server.GetApplicationHostConfiguration(); ConfigurationSection requestFilteringSection = appHostConfig.GetSection("system.webServer/security/requestFiltering"); // 获取或创建requestLimits元素 ConfigurationElement requestLimitsElement = requestFilteringSection.GetChildElement("requestLimits"); if (requestLimitsElement == null) { requestLimitsElement = requestFilteringSection.CreateElement("requestLimits"); requestFilteringSection.AppendChild(requestLimitsElement); } // 设置maxQueryString为4096(注意值为整数类型,而非字符串) requestLimitsElement["maxQueryString"] = 4096; // 提交配置更改 server.CommitChanges(); }
关键说明
- 权限要求:必须以管理员权限运行程序,否则无法修改
applicationHost.config系统配置文件 - 类型匹配:
maxQueryString的属性值是整数类型,传入字符串会引发类型错误 - 节点结构:
requestLimits是requestFiltering的直接子元素,需用GetChildElement获取;若不存在则创建后通过AppendChild添加,而非操作集合
之前代码的错误原因
- 第一段代码抛出
NullReferenceException:requestFilteringSection.GetCollection()获取的是filteringRules等集合,并非requestLimits所在的节点,后续操作空引用导致异常 - 第二段代码抛出
InvalidCastException:错误地将requestLimits当作集合项处理,同时尝试将字符串赋值给整数类型属性,引发类型转换错误
内容的提问来源于stack exchange,提问作者Enderbyte09
相关产品推荐
相关产品推荐

