请求在使用时超出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,但这导致了同样的问题,接受的答案没有任何帮助。