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

时间:2011-11-16 21:57:46

标签: c# javascript asp.net-mvc-3

enter image description here
我在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>

键下的Web配置文件的键。

那里没有快乐,所以我变得荒谬,并且变得4096,仍然没有快乐。

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

VS2010 Pro SP1

4 个答案:

答案 0 :(得分:195)

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

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

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

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

答案 1 :(得分:67)

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

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

答案 2 :(得分:5)

对于其他可能遇到此问题并且上述任一选项都无法解决的问题,这对我有用。

1. Click on the website in IIS
2. Double Click on Authentication under IIS
3. Enable Anonymous Authentication

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

答案 3 :(得分:4)

我使用datatables.net

时出现此错误

我修复了更改默认ajax获取到DataTable()

的te属性中的POST
"ajax": {
        "url": "../ControllerName/MethodJson",
        "type": "POST"
    },