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

我正在建立一个网站,其中我想创建一个文件客户端从值的文本元素。

我已经准备好了执行此操作的代码,但是我得到了这个错误

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

有没有一种方法可以覆盖它,这样我就可以处理任何大小的请求?

如果没有,有没有不使用 filessystem/active x 对象生成文件客户端的方法?

谢谢

262830 次浏览

在 web.config 中添加以下内容:

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

参见:

Http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

更新以反映评论。

RequestLimits 元素用于 requestFilter [ IIS 设置架构]

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

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

见: httpRuntime Element (ASP.NET Settings Schema)

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

在我的例子中(Visual Studio 2012/IIS Express/ASP.NET MVC 4 app/。Net Framework 4.5)经过30分钟的反复试验,真正起作用的是在 <httpRuntime>标签中设置 maxQueryStringLength属性:

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

maxQueryStringLength默认为 2048

点击这里了解更多:

扩大允许 URL 的范围


我试着按照 @ 马特 · 瓦布鲁的建议在 <system.webServer>中设置它,但是它不起作用... ... 这是因为我在 Windows 8的开发机器上使用 IIS Express (基于 IIS 8)。

当我将我的应用部署到生产环境中时(Windows Server 2008 R2为 Iis7) ,IE10开始在带有长查询字符串的 AJAX 请求中返回404个错误。然后我认为这个问题与查询字符串有关,并尝试了@MattVarblow 的答案。刚刚在 IIS7上成功了。:)

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

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

如果是,则应删除 method属性。

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

还需要检查的是: 如果您的站点正在使用 MVC,那么如果您将[ Authorize ]添加到登录控制器类中,就会发生这种情况。它不能访问 login 方法,因为它没有被授权,所以它会重定向到 login 方法—— > boom。

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

如果你的网站正在使用认证,但你没有在 IIS 中建立正确的认证方法(例如 Basic、 Forms 等)那么浏览器就会陷入重定向循环。这会导致重定向 URL 变得越来越长,直到它爆炸。

如果您在运行 IIS8.5 Web 服务器时遇到这个问题,您可以使用以下方法。

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

enter image description here

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

enter image description here

然后,最后要做的事情是将 “最大查询字符串(字节)”值从 2048年改为更适合您需要的 五千值。

enter image description here

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

因此,总是使用类型 post 在 ajax 将解决 你的问题100% ,不需要在 web.config 中设置长度。

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

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

如果您在使用 IIS Express 运行 Visual Studio 中的应用程序时遇到了这种情况,那么首先您必须找到应用程序正在使用的 Applicationhost.config文件。关于如何定位 Applicationhost.config文件,请参阅 https://stackoverflow.com/a/41553876/1849880上的答案。然后,您可以如上所述更改 MaxQueryString值。