请求在使用时超出configuration的maxQueryStringLength

在这里输入图像说明
我在C#中有一个MVC3网站,我有一个特定的观点从JavaScript函数提供查询参数,functionredirect到网站通过

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

query_string是由JavaScript函数构build的dynamic查询参数string。

造成这种奇怪的原因是,有时候同样的函数将URL传递给一个ASP.Net的webform,因为它不得不使用reportviewer控件,replace动作是保存一些参数,在这种情况下它传递给视图。 (如果没有意义,可以详细说明)

整个事情工作正常,直到我介绍[授权]的行动方法。 如果到位,就会中断,没有问题,并且[Authorize]在所有其他方法上工作正常。

在这种情况下,整个URL是966个字符长,经过研究,似乎默认情况下maxQueryStringLength的值是2048,但可以重写为任何整数types的值,所以只是为了增加

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

键下的networkingconfiguration文件。

在那里没有快乐,所以我变得荒谬可笑,成了4096,依然没有欢乐。

现在整个URL长度为966个字符,authorize属性不能认真添加1082-3130个字符,那么我怎样才能确定错误究竟是什么,或者为什么设置没有生效。

VS2010 Pro SP1

当一个未经授权的请求进入时,整个请求被URL编码,并作为查询string添加到授权表单的请求,所以我可以看到这可能导致您的情况出现问题。

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

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

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

另外,我不得不在system.webServer节点下添加它,否则我的长查询string出现安全错误:

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

我有这个错误使用datatables.net

我修正了更改默认的ajax在DataTable的属性中获取POST()

 "ajax": { "url": "../ControllerName/MethodJson", "type": "POST" }, 

对于任何可能遇到这个问题的人来说,上述任何一个选项都不能解决这个问题,这对我来说是有效的。

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

我已经禁用了这个,因为我们正在使用我们自己的身份validation,但这导致了同样的问题,接受的答案没有任何帮助。