如何在模型绑定期间忽略HttpRequestValidationException和编码HTML?

时间:2011-03-18 17:26:18

标签: c# asp.net-mvc-3 model-binding

我正在试图弄清楚如何忽略在模型绑定期间抛出的HttpRequestValidationException。

这是交易,我知道如何处理HTML被发布并绑定到需要HTML的属性(使用AllowHtml属性)但是当用户在不允许HTML的字段中发布HTML时,我想自动在绑定到模型期间对该值进行编码。

我已经创建了一个自定义模型绑定器来捕获抛出的HttpRequestValidationException但是每当我尝试从Request.Form获取值时,都会抛出相同的异常。

在MVC3中有自动方法吗?

我是否需要将AllowHtml添加到模型中的所有属性,然后在动作中自行编码?

我可以在模型绑定期间访问发布给我的HTML,而不是每次我从Request.Form请求它时都会抛出HttpRequestValidationException吗?

感谢您提供的任何帮助。

修改 我不想关闭整个操作的验证。如果我想确保当某人以他们不应该拥有的形式输入html时不会抛出异常,那就有点激烈了。

3 个答案:

答案 0 :(得分:3)

同样的问题发生在我身上。即使在这个较老的线程上,我也想分享解决方案。答案很难找到但很简单。有一种扩展方法,允许访问form和querystring unvalidated。

System.Web.Helpers.UnvalidatedRequestValues unvalidatedRequest = System.Web.Helpers.Validation.Unvalidated(Context.Request)
System.Collections.Specialized.NameValueCollection form = unvalidatedRequest.form

根本不需要requestValidationMode或关闭验证。 This文章引导我找到解决方案。

答案 1 :(得分:2)

对我来说,fan711的答案现在已被删除。现在你应该使用

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
{ 
    //... code here 
    controllerContext.HttpContext.Request.Unvalidated.Form.GetValues(key); 
    //... code here 
}

答案 2 :(得分:0)

类似的东西:

[HttpPost, ValidateInput(false)]
public ActionResult Edit(FormCollection collection)
{
    // ...
}

有关详情,请参阅此处: A potentially dangerous Request.Form value was detected from the client