我正在试图弄清楚如何忽略在模型绑定期间抛出的HttpRequestValidationException。
这是交易,我知道如何处理HTML被发布并绑定到需要HTML的属性(使用AllowHtml属性)但是当用户在不允许HTML的字段中发布HTML时,我想自动在绑定到模型期间对该值进行编码。
我已经创建了一个自定义模型绑定器来捕获抛出的HttpRequestValidationException但是每当我尝试从Request.Form获取值时,都会抛出相同的异常。
在MVC3中有自动方法吗?
我是否需要将AllowHtml添加到模型中的所有属性,然后在动作中自行编码?
我可以在模型绑定期间访问发布给我的HTML,而不是每次我从Request.Form请求它时都会抛出HttpRequestValidationException吗?
感谢您提供的任何帮助。
修改 我不想关闭整个操作的验证。如果我想确保当某人以他们不应该拥有的形式输入html时不会抛出异常,那就有点激烈了。
答案 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