0

編集:

ここで答えを見つけました: 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; }
}
4

1 に答える 1

1

[ValidationInput(false)]Post メソッド (例外がスローされている場所) に を配置し、さらに を追加してみてください[AcceptVerbs(HttpVerbs.Post)]。しかし、これが公開 Web サイトになる場合は、XXS を受け入れることになります。これは賢明ではありません。

于 2012-08-02T18:27:27.113 に答える