编辑:
在这里找到答案:ASP.NET MVC 3 ValidateRequest(false) not working with FormCollection
原来我需要添加System.Web.Helpers
所以我可以在Request对象上使用Unvalidated()
扩展方法。这会给你一个请求,不会在不安全的输入上抛出异常。
-
所以这是我的问题发生的背景:
由于某些子对象可以接受可能包含HTML的字符串输入,因此我需要禁用MVC的输入验证。我在action方法上设置了[ValidateInput(false)]
属性,但HttpRequestValidationException
仍在模型的构造函数中抛出。一时兴起,我甚至尝试在模型的活页夹和模型本身上添加[ValidateInput]
属性,但这也没有解决问题。
我在这里不知所措。我如何处理这些异常,以至于我仍然可以从表单中提取信息?或者,在这种情况下,禁用MVC输入验证的适当方法是什么?
类草图如下:
public class FooController : ControllerBase {
[HttpPost]
[ValidateInput(false)]
public ActionResult FooAction(FooModel model) { //do stuff; }
}
//tried [ValidateInput(false)] here as well, to no avail
public class FooBinder : BinderBase {
public override object BindModel(...) {
return new FooModel(controllerContext.HttpContext.Request.Form);
}
}
//tried [ValidateInput(false)] here, too....again, no success
public class FooModel {
public FooModel(NameValueCollection formData) {
//do some initialization stuff
var keys = formData.AllKeys; //exception thrown here when inputs contain '<' or '>'
//do some object construction stuff
}
public IEnumerable<FooChid> ChildCollection { get; set; }
}
答案 0 :(得分:1)
尝试将[ValidationInput(false)]
放在Post方法(抛出异常的位置)上,并另外添加[AcceptVerbs(HttpVerbs.Post)]
。但如果这将成为一个公共网站,那么你就是打开XXS,这是不明智的。