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

时间:2012-07-24 17:44:26

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

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

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

  

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

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

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

感谢

10 个答案:

答案 0 :(得分:222)

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

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

请参阅:

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

已更新以反映评论。

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)只是示例。您不必使用这些确切的值。

答案 1 :(得分:29)

就我而言(Visual Studio 2012 / IIS Express / ASP.NET MVC 4 app / .Net Framework 4.5),经过30分钟的试错后真正起作用的是maxQueryStringLength <httpRuntime>属性标签:

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

maxQueryStringLength默认为2048

更多相关信息:

Expanding the Range of Allowable URLs


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

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

答案 2 :(得分:6)

要检查的其他内容:如果您的站点使用MVC,如果您将[授权]添加到登录控制器类,则会发生这种情况。它无法访问登录方法,因为它未经授权,因此重定向到登录方法 - &gt;热潮。

答案 3 :(得分:0)

我在尝试将ASP Web应用程序部署到IIS 8时遇到了类似的问题。为了解决这个问题,我按照Matt和Leniel的说法进行了修改。但是还必须配置我的站点的身份验证设置以启用匿名身份验证。这对我有用。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

enter image description here

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

enter image description here

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

enter image description here

答案 7 :(得分:0)

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

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

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

$。ajax({         全球:假,         url:SitePath +“ / User / getAussizzMembersData”,         “数据”:{UserIds:UserId},         “ type”:“ POST”,         “ dataType”:“ JSON” }}

答案 8 :(得分:0)

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

答案 9 :(得分:-1)

  

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

要解决此问题,请检查源代码,Form标记的属性method是否为获取/设置状态。

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