如何从我的网络服务器获得各种最大请求段长度?
How can I get various maximum request segment lengths from my webserver?
我们正在以下堆栈上构建应用程序:
- .NET 4.6.1
- ASP.NETMVC 5
- IIS 8
我们有人在我们的应用程序中生成非常长的搜索过滤器查询字符串。当前生成的 GET 请求会导致服务器出现异常。如果他们的请求字符串太长,我们想警告他们,而不是提交无效的 GET 请求。
我们的 .js 人员可以填充 AJAX 请求以支持对完整 URL 和查询字符串的长度检查,非常容易。问题是我们不想假设我们知道这些值的正确最大长度。我们想查询服务器以了解 URL 和查询字符串的最大长度是多少,然后在客户端动态使用它。
我可以非常轻松地将 Web API 端点构建为 return 这些值,但我无法 确定 我得到了正确的价值观。例如,我可以直接读取我们的配置文件并查找类似这样的内容:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxUrl="2000" maxQueryString="2000" />
</requestFiltering>
</security>
</system.webServer>
不过,我不是确定那才是真正权威的地方。我希望有人知道如何使用 C# 向 IIS 询问以下问题并确定 得到正确答案:
- GET 请求允许的最大 URL 长度是多少
当前申请?
- 允许的最大查询字符串长度是多少
对于当前应用程序的 GET 请求?
以下是读取配置值的方法 - 然后可以通过 API:
返回这些值
var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
var section = config.GetSection("system.webServer");
var xml = section.SectionInformation.GetRawXml();
var doc = XDocument.Parse(xml);
var element = doc.Root.Element("security").Element("requestFiltering").Element("requestLimits");
var maxUrl = element.Attribute("maxUrl").Value;
var maxQs = element.Attribute("maxQueryString").Value;
请记住,客户端(浏览器)会像代理服务器一样施加自己的限制。
下面的 SO 答案暗示您 可能 也必须在 httpRuntime 元素中设置限制...尽管没有解释原因。参见:How to configure the web.config to allow requests of any length
关于 www.asp.net 的这篇文章也可能对增加允许的 URL 尺寸的更多信息有所帮助:http://www.asp.net/whitepapers/aspnet4#0.2__Toc253429244
我们正在以下堆栈上构建应用程序:
- .NET 4.6.1
- ASP.NETMVC 5
- IIS 8
我们有人在我们的应用程序中生成非常长的搜索过滤器查询字符串。当前生成的 GET 请求会导致服务器出现异常。如果他们的请求字符串太长,我们想警告他们,而不是提交无效的 GET 请求。
我们的 .js 人员可以填充 AJAX 请求以支持对完整 URL 和查询字符串的长度检查,非常容易。问题是我们不想假设我们知道这些值的正确最大长度。我们想查询服务器以了解 URL 和查询字符串的最大长度是多少,然后在客户端动态使用它。
我可以非常轻松地将 Web API 端点构建为 return 这些值,但我无法 确定 我得到了正确的价值观。例如,我可以直接读取我们的配置文件并查找类似这样的内容:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxUrl="2000" maxQueryString="2000" />
</requestFiltering>
</security>
</system.webServer>
不过,我不是确定那才是真正权威的地方。我希望有人知道如何使用 C# 向 IIS 询问以下问题并确定 得到正确答案:
- GET 请求允许的最大 URL 长度是多少 当前申请?
- 允许的最大查询字符串长度是多少 对于当前应用程序的 GET 请求?
以下是读取配置值的方法 - 然后可以通过 API:
返回这些值var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
var section = config.GetSection("system.webServer");
var xml = section.SectionInformation.GetRawXml();
var doc = XDocument.Parse(xml);
var element = doc.Root.Element("security").Element("requestFiltering").Element("requestLimits");
var maxUrl = element.Attribute("maxUrl").Value;
var maxQs = element.Attribute("maxQueryString").Value;
请记住,客户端(浏览器)会像代理服务器一样施加自己的限制。
下面的 SO 答案暗示您 可能 也必须在 httpRuntime 元素中设置限制...尽管没有解释原因。参见:How to configure the web.config to allow requests of any length
关于 www.asp.net 的这篇文章也可能对增加允许的 URL 尺寸的更多信息有所帮助:http://www.asp.net/whitepapers/aspnet4#0.2__Toc253429244