編集:
ここで答えを見つけました: ASP.NET MVC 3 ValidateRequest(false) not working with FormCollection
Request オブジェクトで拡張メソッドをSystem.Web.Helpers
使用できるように、追加する必要があることがわかりました。Unvalidated()
これにより、安全に見えない入力に対して例外をスローしないリクエストが得られます。
--
だからここに私の問題が発生しているコンテキストがあります:
- 子オブジェクトのコレクションを含むモデル クラスがあります。
- モデルをアクション メソッドにポストできるように、FORM 入力を解析するコンストラクタを作成しました。
- 投稿された Request から Form オブジェクトを取得し、それをモデルのコンストラクターに渡すバインダーをセットアップしました
一部の子オブジェクトは HTML を含む可能性のある文字列入力を受け入れることができるため、MVC の入力検証を無効にする必要があります。[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; }
}