编辑:
在这里找到答案:ASP.NET MVC 3 ValidateRequest(false) not working with FormCollection
原来我需要添加System.Web.Helpers
,所以我可以Unvalidated()
在 Request 对象上使用扩展方法。这为您提供了一个不会在看起来不安全的输入上引发异常的请求。
--
所以这是我的问题发生的背景:
- 我有一个模型类,其中包含一组子对象
- 我编写了一个构造函数,它将解析 FORM 输入,以便我可以将模型发布到操作方法
- 我已经设置了一个活页夹,它从发布的请求中获取 Form 对象并将其传递给我的模型的构造函数
由于某些子对象可以接受可能包含 HTML 的字符串输入,因此我需要禁用 MVC 的输入验证。我已经[ValidateInput(false)]
在 action 方法上设置了一个属性,但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; }
}