我怎样才能从我的网络服务器获得各种最大请求段长度?

我们正在下面的堆栈上构建一个应用程序:

  • .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询问以下问题并确定是否有正确的答案:

  • 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;
    

    请记住,尽管客户端(浏览器)会强加自己的限制,代理服务器也是如此。

    下面的答案意味着你可能不得不在httpRuntime元素中设置限制......尽管它没有解释为什么。 请参阅:如何配置web.config以允许任意长度的请求

    www.asp.net上的这篇文章也可能对更多信息增加允许的URL大小有所帮助:http://www.asp.net/whitepapers/aspnet4#0.2__Toc253429244

    链接地址: http://www.djcxy.com/p/42045.html

    上一篇: How can I get various maximum request segment lengths from my webserver?

    下一篇: display image from base64 via querystring