如何配置web.config以允许任何长度的请求


137

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

我有执行此操作的代码,但出现此错误

HTTP错误404.15-找不到请求过滤模块配置为在查询字符串过长的情况下拒绝请求。

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

如果没有,有没有一种方法可以在不使用filesystem / active x对象的情况下生成客户端文件?

谢谢


8
您要考虑的是,即使可以为IIS或您的应用程序配置查询字符串的长度,也存在URL长度的HTTP标准。由于您使用的是查询字符串,因此您将值作为URL的一部分传递。URL的最大字符长度为2000个字符。如果您的值将是冗长的字符串,则最好发布这些值,而不是将其传递到查询字符串中。
杰夫·拉法

2
同意Jlafay。当您拥有2-3个以上的简单参数时,最好将这些值过帐。当您使用查询字符串时,请务必对其进行加密。
杰克

Answers:


242

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

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

看到:

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

更新以反映评论。

requestFiltering的requestLimits元素[IIS设置架构]

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

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

请参阅:httpRuntime元素(ASP.NET设置架构)

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


24
仅凭这一点对我来说还不够。我还必须将其添加到system.web部分:<httpRuntime maxQueryStringLength =“ 8192” />
Rob Sedgwick

2
nnn是您希望允许的最大字符串长度,例如32768
Matt Varblow


我分别尝试了每个实例,在system.webServer下设置了安全节点,然后删除了属性并将其添加到httpRuntime节点。我绝对需要两个人一起工作。非常感谢!
戴维·冈德森

2
注意:<httpRuntime>标记位于<system.web>下:<system.web> <httpRuntime maxQueryStringLength =“ 32768” maxUrlLength =“ 65536” /> </ system.web>
LePatay

33

就我而言(Visual Studio 2012 / IIS Express / ASP.NET MVC 4应用程序/.Net Framework 4.5),经过30分钟的反复试验,真正起作用的是maxQueryStringLength<httpRuntime>标记中设置属性:

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

maxQueryStringLength默认为2048

有关此的更多信息:

扩大允许的URL范围


我尝试<system.webServer>按照@MattVarblow的建议进行设置,但这没有用……这是因为我在Windows 8的开发机上使用IIS Express(基于IIS 8)。

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


2
对我来说,使
奇迹成

6

还有其他需要检查的地方:如果您的站点使用的是MVC,那么如果您在登录控制器类中添加了[Authorize],就会发生这种情况。由于未经授权,它无法访问登录方法,因此它将重定向到登录方法-> boom。


谢谢!我遇到了这个问题,因为我将菜单/导航移到了部分视图,并且将另一个Controller不允许匿名连接。
Westerlund.io

错误消息尽管为真,但与实际问题无关。
史蒂夫·史密斯

1
还请检查项目属性,因为可能是Windows身份验证为“已启用”,而匿名身份验证为“已禁用”。请查看这篇详细的文章- 错误(Visual Studio 2013,MVC5):请求过滤模块配置为拒绝查询字符串太长的请求
fujiFX

5

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

首先,在您正在使用的IIS站点中找到“请求筛选”模块,然后双击它...

在此处输入图片说明

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

在此处输入图片说明

然后,最后要做的就是将“最大查询字符串(字节)”的值从2048更改为更合适的值,例如5000

在此处输入图片说明


谢谢,这对我来说是最简单且可行的解决方案
Afif Zafri

谢了哥们!!!!!
Noobie

0

尝试将ASP Web应用程序部署到IIS 8时,我遇到了类似的问题。要解决该问题,我按照上面的Matt和Leniel的建议进行了操作。而且还必须配置我的站点的“身份验证”设置以启用“匿名身份验证”。这对我有用。


0

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


0

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


0

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

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

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

$ .ajax({global:false,url:SitePath +“ / User / getAussizzMembersData”,“ data”:{UserIds:UserId},“ type”:“ POST”,“ dataType”:“ JSON”}}


-1

HTTP错误404.15-找不到请求过滤模块配置为在查询字符串过长的情况下拒绝请求。

要解决此问题,请在源代码中检查Form标签是否具有属性method为“获取/设置”状态。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.