使用[授权]时,请求超出配置的maxQueryStringLength

Sab*_*bre 120 javascript c# asp.net-mvc-3

在此输入图像描述
我在C#中有一个MVC3站点,我有一个特殊的视图是从JavaScript函数提供查询参数,该函数通过以下方式重定向到站点

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

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

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

整个工作正常,直到我将[授权]引入动作方法.如果它到位则中断,没有正常工作,并且[授权]在所有其他方法上正常工作.

在这种情况下,整个URL是966个字符长,在研究之后,默认情况下maxQueryStringLength值似乎是2048,但是可以覆盖到任何类型为integer的值,所以只是对于grins,我添加了

<security>
  <requestFiltering>
    <requestLimits maxQueryString="2048"></requestLimits>
  </requestFiltering>
</security>
Run Code Online (Sandbox Code Playgroud)

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

那里没有欢乐,所以我变得荒谬,并使它成为4096,仍然没有快乐.

现在整个URL长度为966个字符,授权属性不能严重添加另一个1082-3130字符,因此如何确定错误实际是什么,或者为什么设置没有生效.

VS2010 Pro SP1

the*_*erm 203

web.config项目的根目录下,在system.web节点下:

<system.web>
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
...
Run Code Online (Sandbox Code Playgroud)

另外,我不得不在system.webServer节点下添加它,或者我的长查询字符串出现了安全性错误:

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
...
Run Code Online (Sandbox Code Playgroud)

  • 这立即解决了我的问题,因为我在MVC 4项目上遇到了同样的问题.添加上述两个解决了我的错误.非常感谢!! (4认同)
  • 开放这个会造成任何严重的安全缺陷吗?将 maxurl 和 maxquery 设置为 2097151 有什么负面影响? (2认同)
  • 请注意,`maxQueryString`是* int形式的长度(以字节为单位),最大值为4294967295,而`maxQueryStringLength`是* characters *形式的长度,以int形式,但范围为0-2097151。 (2认同)

cou*_*ben 70

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

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

  • 另外要知道的是这个参数的最大值是2097151 - 起初我尝试使用Int32.MaxValue,但是在运行时抛出的异常使我指出使用0到2097151之间的值. (8认同)

小智 7

我使用 datatables.net 时遇到此错误

我修复了在 DataTable() 的 te 属性中更改默认 ajax Get 到 POST 的问题

"ajax": {
        "url": "../ControllerName/MethodJson",
        "type": "POST"
    },
Run Code Online (Sandbox Code Playgroud)


小智 5

对于可能遇到此问题且无法通过以上两个选项之一解决的其他任何人,这对我来说是有效的。

1. Click on the website in IIS
2. Double Click on Authentication under IIS
3. Enable Anonymous Authentication
Run Code Online (Sandbox Code Playgroud)

我禁用了此功能是因为我们使用的是自己的Auth,但这导致了同样的问题,并且被接受的答案没有任何帮助。