20

フォーム フィールドの「<」文字を正規表現バリデーターでインターセプトしたいと考えています。3 つのステップで問題を説明します。

ステップ 1 : 「<」文字を含むフィールドを含むフォームを送信しようとすると、「潜在的に危険なリクエスト...」というメッセージが表示されます - ASP.NET で予想されるとおりです。

ステップ 2 : ASP.NET の RequestValidation を回避するために、コントローラーの Update メソッドを "[ValidateInput(false)]" で装飾します。

期待どおりに動作します。エラーなしで「<」文字を投稿できるようになりました。

ステップ 3 : DataAnnotations で xVal を使用します。たとえば、[Required] または [StringLength(255)] は期待どおりに機能します。

しかし、 [RegularExpression ("^[^<>]*$", ErrorMessage = "Special characters are not allowed.")]使用すると、[ValidateInput (false)] ディレクティブ。

何が起こっていますか?正規表現検証のためのより簡単な方法はありますが、[ValidateInput(false)] が配置されていますか? もちろん、コントローラーではなくモデルに検証コードを入れたいと思います。

4

6 に答える 6

0

いいえ、MVC 1+xValの問題でした。MVC 2では、検証は想定どおりに機能します(xValはもう必要ありません)– Alex42

ボットはこれをトップに押し続けているようです。回答を承認済みとしてマークして、それがわかるようにしてください。

于 2011-01-07T00:01:39.723 に答える
0

単なるフィールドの場合は、文字「< または >」を検索して削除するルーチンを作成するだけです。部分文字列を使用することでこれを実現できます。これが役立つことを願っています

  • テストするテキストの長さに for ループを使用します (for (int i=1, i <= text.length, ++))
  • 1 で始まる各文字を確認します (例: ch = text.substring(i,1)
  • '< または >' を除く各読み取り文字を tmp 文字列に追加します
于 2010-11-20T19:28:33.907 に答える
0

この行を web.config に入れます

<httpRuntime requestValidationMode="2.0" />

これは ASPNET 4.0 での変更です

于 2010-12-10T09:44:24.577 に答える
0

xVal と nhibernate.validator を使用しており、この動作を再現しようとしましたが、バリデーターがクライアント側に関連付けられているため、クライアント側の検証を過ぎて値を取得できませんでした。JavaScriptを無効にすると、サーバー側の検証に到達し、正規表現バリデーターによってキャッチされました。

データ注釈の検証属性とモデルバインダーを使用して同じことを試してみましたが、それも過去のものになりました。

エラーの原因となっている何か他のことが起こっているに違いありません。申し訳ありませんが、これ以上お役に立てませんでした。

于 2009-07-30T13:39:02.553 に答える
0

静的メソッドEscape()がこれを解決すると思います。

  Regex r = new Regex(Regex.Escape(expression));
于 2010-11-23T13:28:36.440 に答える
0

この方法で簡単なルールを使用して検証してみてください。これにより、少なくとも式から xVal を除外できます。問題が解決しない場合は、次のいずれかに関連していることをお勧めします。

  • MVC のデフォルトのモデル バインダーの実装
  • または、使用しているリリースの MVC ビュー エンジンに問題があり、それを検証することによって、指定した属性に対して何らかの例外が発生する可能性があり<ます。
于 2009-11-25T06:19:05.997 に答える