簡體   English   中英

如何防止自定義活頁夾中的MVC3輸入驗證?

[英]How to prevent MVC3 input validation in custom binder?

編輯:

在這里找到答案: ASP.NET MVC 3 ValidateRequest(false)不能與FormCollection一起使用

原來,我需要添加System.Web.Helpers以便可以在Request對象上使用Unvalidated()擴展方法。 這樣就給您一個請求,該請求不會在外觀不安全的輸入上引發異常。

-

所以這是發生我的問題的上下文:

  • 我有一個模型類,其中包含子對象的集合
  • 我已經編寫了一個構造函數,它將解析FORM輸入,以便可以將模型發布到操作方法
  • 我已經設置了一個活頁夾,該活頁夾從發布的請求中獲取Form對象,並將其傳遞給我的模型的構造函數

由於某些子對象可以接受可能包含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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM