我在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
答案 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"
},