ASP.NET MVC非英语URL请求验证异常

时间:2014-06-12 01:59:25

标签: c# asp.net-mvc model-view-controller httpwebrequest

在我的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&#252;ez, PR").]

然后我用“[ValidateInput(false)]”在控制器中装饰我的动作,就像这样 -

        [ValidateInput(false)]
        [HttpGet]
        [OutputCache(CacheProfile = "test")]
        public ActionResult Image(string Selected_Nme = ""){
...
}

此后我仍然看到同样的错误。

我该怎么做才能消除这个问题?

谢谢,

1 个答案:

答案 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; }
}