【问题标题】:How to configure the web.config to allow requests of any length如何配置 web.config 以允许任何长度的请求
【发布时间】:2012-07-23 02:19:36
【问题描述】:

我正在构建一个站点,我想在其中从 textarea 元素的值创建一个文件客户端。

我有执行此操作的代码,但我收到此错误

HTTP 错误 404.15 - Not Found 请求过滤模块是 配置为拒绝查询字符串过长的请求。

有没有办法覆盖它,以便我能够处理任何大小的请求?

如果没有,有没有办法在不使用文件系统/活动 x 对象的情况下在客户端生成文件?

谢谢

【问题讨论】:

  • 您要考虑的是,即使查询字符串的长度可以为 IIS 或您的应用程序配置,但 URL 长度有一个 HTTP 标准。由于您使用的是查询字符串,因此您将值作为 URL 的一部分传递。最大 URL 字符长度为 2000 个字符。如果您的值将是冗长的字符串,最好将值发布而不是在查询字符串中传递它们。
  • 同意 Jlafay。当您有超过 2-3 个简单参数时,最好发布值。当你使用查询字符串时,一定要加密它们。

标签: c# javascript asp.net-mvc web-config query-string


【解决方案1】:

将以下内容添加到您的 web.config:

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

见:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

已更新以反映 cmets。

requestLimits Element for requestFiltering [IIS Settings Schema]

您可能还需要在 web.config 中添加以下内容

<system.web>
    <httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/>
</system.web>

见:httpRuntime Element (ASP.NET Settings Schema)

当然,上面配置设置中的数字(32768 和 65536)只是示例。您不必使用这些精确值。

【讨论】:

  • 仅此对我来说还不够。我还必须将此添加到 system.web 部分:
  • nnn 是您希望允许的最大字符串长度,例如32768
  • 我分别尝试了每一个,在 system.webServer 下设置安全节点,然后删除并将属性添加到 httpRuntime 节点。我绝对需要两者都工作。非常感谢!
  • 注意: 标签位于 下:
【解决方案2】:

在我的情况下(Visual Studio 2012 / IIS Express / ASP.NET MVC 4 app / .Net Framework 4.5),经过 30 分钟的反复试验,真正奏效的是在 &lt;httpRuntime&gt; 标签中设置 maxQueryStringLength 属性:

<httpRuntime targetFramework="4.5" maxQueryStringLength="10240" enable="true" />

maxQueryStringLength 默认为2048

更多信息在这里:

Expanding the Range of Allowable URLs


我尝试按照@MattVarblow 的建议在&lt;system.webServer&gt; 中设置它,但它不起作用...这是因为我在装有Windows 8 的开发机器上使用IIS Express(基于IIS 8)。

当我将我的应用程序部署到生产环境(带有 IIS 7 的 Windows Server 2008 R2)时,IE 10 开始在带有长查询字符串的 AJAX 请求中返回 404 错误。然后我认为问题与查询字符串有关,并尝试了@MattVarblow 的答案。它只适用于 IIS 7。:)

【讨论】:

  • 对我来说,是 enable="true" 让奇迹发生了 :)
【解决方案3】:

如果您在运行 IIS 8.5 Web 服务器时遇到此问题,您可以使用以下方法。

首先,在您正在处理的 IIS 站点中找到 “请求过滤” 模块,然后双击它...

接下来,您需要右键单击下图所示的白色区域,然后单击名为“编辑功能设置”的上下文菜单选项。

那么最后要做的就是将 "Maximum query string (Bytes)" 值从 2048 更改为更合适的值,例如 5000 满足您的需求。

【讨论】:

  • 谢谢你!你是救生员!
【解决方案4】:

需要检查的其他事项:如果您的网站使用 MVC,如果您将 [Authorize] 添加到您的登录控制器类,就会发生这种情况。它无法访问登录方法,因为它没有被授权所以它重定向到登录方法-->繁荣。

【讨论】:

【解决方案5】:

在ajax调用参数中传递大字符串也会产生错误。

因此,始终在 ajax 中使用类型 post 将解决 您的问题 100%,并且无需在 web.config 中设置长度。

// var UserId= 1000 个用户 ID 的数组

$.ajax({ 全局:假, url: SitePath + "/User/getAussizzMembersData", “数据”:{用户ID:用户ID}, “类型”:“发布”, “数据类型”:“JSON” }}

【讨论】:

    【解决方案6】:

    我在尝试将 ASP Web 应用程序部署到 IIS 8 时遇到了类似的问题。为了解决这个问题,我按照上面的 Matt 和 Leniel 建议做了。但还必须配置我网站的身份验证设置以启用匿名身份验证。这对我有用。

    【讨论】:

      【解决方案7】:

      我必须在登录页面的 ActionResult 函数中添加 [AllowAnonymous],因为用户尚未通过身份验证。

      【讨论】:

        【解决方案8】:

        如果您的网站正在使用身份验证,但您没有在 IIS 中设置正确的身份验证方法(例如 Basic、Forms 等),那么浏览器将陷入重定向循环。这会导致重定向 url 越来越长,直到爆炸。

        【讨论】:

        • 如何解决?
        • @Yster 您需要将身份验证方法设置为正确设置的方法。 (在 IIS 设置和选项的泥潭中的某个地方会有选项)。
        【解决方案9】:

        对于在使用 IIS Express 从 Visual Studio 运行应用程序时遇到这种情况的人,首先您必须找到应用程序正在使用的 applicationhost.config 文件。有关如何定位 applicationhost.config 文件的信息,请参阅https://stackoverflow.com/a/41553876/1849880 的答案。然后,您可以按照上述说明更改 maxQueryString 值。

        【讨论】:

          【解决方案10】:

          HTTP 错误 404.15 - Not Found 请求过滤模块是 配置为拒绝查询字符串过长的请求。

          要解决这个问题,请在源代码中检查Form标签是否有属性method是get/set状态。

          如果是这样,method 属性应该被删除。

          【讨论】:

            猜你喜欢
            • 2019-05-28
            • 2014-10-16
            • 2015-02-14
            • 2013-09-13
            • 2020-11-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-07
            相关资源
            最近更新 更多