在我的ASP.NET MVC 2应用程序中,我有这个编码的图像url -
<img src="/Image?Selected_Nme=Mayag%26%23252%3Bez%2C%20PR/>
未编码的Selected_Nme是“Mayagüez,PR”。
我会收到这样的异常错误 -
[HttpRequestValidationException (0x80004005): A potentially dangerous Request.QueryString value was detected from the client (amp;Selected_Nme="Mayagüez, PR").]
然后我用“[ValidateInput(false)]”在控制器中装饰我的动作,就像这样 -
[ValidateInput(false)]
[HttpGet]
[OutputCache(CacheProfile = "test")]
public ActionResult Image(string Selected_Nme = ""){
...
}
此后我仍然看到同样的错误。
我该怎么做才能消除这个问题?
谢谢,
答案 0 :(得分:2)
您需要配置requestValidationMode
:
<system.Web>
...
<httpRuntime requestValidationMode="2.0"/>
来自Request Validation in ASP.NET:
您可以禁用整个应用程序的请求验证,但是 不建议这样做。建议是有选择地 仅针对虚拟路径或特定路径禁用请求验证 要允许标记的页面。
在任何一种情况下,您都必须在Web.config文件中进行两处更改。该 第一个更改是设置requestValidationMode属性 httpRuntime元素为&#34; 2.0&#34;。此设置进行请求验证 稍后在请求处理事件的序列中发生。 设置 对于使用ASP.NET 4及更高版本的应用程序是必需的,因为as 在ASP.NET 4中,请求验证在请求的早期发生 生命周期比以前的ASP.NET版本
最后一个值得注意的地方。使用[ValidateInput(false)]
禁用对发送到方法中的所有数据的验证。如果您仍希望对发送的任何其他属性进行验证,则可以禁用对类的特定属性的验证:
public class SomeModel {
[AllowHtml]
public string Selected_Nme { get; set; }
// this property will still be validated!
public string PleaseDontXSSMe { get; set; }
}