请求在使用 [Authorize] 时超过配置的 maxQueryStringLength

2022-08-30 04:52:06

enter image description here
我在C#中有一个MVC3站点,我有一个特定的视图,从JavaScript函数提供查询参数,该函数通过以下方式重定向到站点

window.location.href = “../ActionName?“ + query_string;

query_string是由 JavaScript 函数构建的动态查询参数字符串。

这种奇怪的原因是,有时相同的函数将URL传递给 ASP.Net Webform,因为它必须使用porterviewer控件,在这种情况下,备用操作是保存一些参数,在这种情况下,它会传递给视图。(如果这没有意义,可以详细说明)

在我向操作方法引入[授权]之前,整个过程都很好。如果它已就位,则中断,在没有工作正常的情况下,并且[Authorize]在所有其他方法上工作正常。

在这种情况下,整个URL的长度为966个字符,经过研究,默认情况下,maxQueryStringLength值似乎是2048,但可以覆盖为整数类型的任何值,因此只是为了咧嘴笑,我添加了

<security>
  <requestFiltering>
    <requestLimits maxQueryString="2048"></requestLimits>
  </requestFiltering>
</security>

密钥下 Web 配置文件的密钥。

那里没有快乐,所以我变得荒谬,把它变成了4096,仍然没有快乐。

现在,由于整个URL的长度为966个字符,因此authorate不能严重地添加另外1082-3130个字符,因此我如何确定错误实际上是什么,或者为什么设置没有生效。

VS2010 专业版 SP1


答案 1

在项目的根目录中,在节点下:web.configsystem.web

<system.web>
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
...

此外,我必须在节点下添加此内容,否则我的长查询字符串出现安全错误:system.webServer

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
...

答案 2

当未经授权的请求传入时,整个请求都经过 URL 编码,并作为查询字符串添加到请求的授权表单中,因此,根据您的情况,我可以看到这可能会导致问题的位置。

根据MSDN,在web.config中要修改以重置maxQueryStringLength的正确元素是元素内部的元素,请参阅httpRuntime Element(ASP.NET 设置架构)。请尝试修改该元素。<httpRuntime><system.web>