如何从我的网络服务器获取各种最大请求段长度?

时间:2016-05-24 21:06:34

标签: c# asp.net-mvc iis iis-8

我们正在以下堆栈上构建应用程序:

  • .NET 4.6.1
  • ASP.NET MVC 5
  • IIS 8

我们有人在我们的应用程序中生成很长的搜索过滤器查询字符串。目前,生成的GET请求会导致服务器上出现异常。如果他们的请求字符串太长,我们要警告他们,而不是提交无效的GET请求。

我们的.js人可以填充AJAX请求以支持完整URL和查询字符串的长度检查。问题是我们不想假设我们知道这些值的正确最大长度。我们想查询服务器以了解URL和查询字符串的最大长度,并在客户端动态使用它。

我可以构建Web API端点以非常轻松地返回这些值,但是我很难确定我获得了正确的值。例如,我可以直接读取我们的配置文件并查找如下内容:

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="2000" maxQueryString="2000" />
      </requestFiltering>
    </security>
</system.webServer>

但是,我并非某些确实是权威的地方。我希望有人知道如何使用C#向IIS询问以下问题,并某些得到正确的答案:

  1. GET请求的最大允许URL长度是多少 目前的申请?
  2. 允许的最大查询字符串长度是多少 对于当前申请的GET请求?

1 个答案:

答案 0 :(得分:1)

以下是您可以阅读配置值的方法 - 然后可以通过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上的这篇文章也可能对增加允许的网址大小的更多信息有所帮助:http://www.asp.net/whitepapers/aspnet4#0.2__Toc253429244