[英]How to prevent MVC3 input validation in custom binder?
編輯:
在這里找到答案: ASP.NET MVC 3 ValidateRequest(false)不能與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; }
}
嘗試將[ValidationInput(false)]
放在Post方法(引發異常的位置)上,並另外添加[AcceptVerbs(HttpVerbs.Post)]
。 但是,如果這將是一個公共網站,那么您將向XXS開放,這是不明智的做法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.