3

このスレッドで説明されているものと同様に、FluentValidation用の汎用リモートバリデーター拡張機能を構築しようとしています。このブログにはクライアント側のソリューションが掲載されていますが、クライアント側とサーバー側の両方で機能するにはリモートバリデーターが必要です。

ルールは次のようになります。

IRuleBuilderOptions<T, TProperty> Remote(string action, 
                                         string controller, 
                                         Expression<Func<T, object>>[] properties, 
                                         IComparable[] values, 
                                         HttpVerbs httpVerb = HttpVerbs.Get);

ここで
action、およびcontrollerはアクション/コントローラーの名前です。
propertiesはモデルプロパティ式の配列です(m => m.FirstName)
valuesはリテラル値の配列です。

バリデーターのルールの設定は次のようになります。

this.RuleFor(m => m.Username).Remote("UsernameUnique", "RemoteController", null, null);

アクションメソッドを呼び出して値を渡すjQueryアダプターを作成するだけなので、クライアント側の部分を理解できると思います。

私が理解できないIsValidのは、バリデーターのメソッドから、同じコントローラーアクションを呼び出す方法です。

これが私が検討したいくつかのオプションです:

  • どういうわけか、コントローラーアクションをリモートで呼び出し、スタブコンテキストを作成します。ただし、IoCを使用して依存性を注入する方法がわかりません。サービスロケーター?

  • 通常の.NETメソッドを使用し、バリデーターとアクションメソッドの両方から呼び出します。

これは利用できる強力なバリデーターになると思いますが、私が思いついたオプションは、たとえうまく機能させたとしても、醜いものになるようです。

これに取り組むためのより良い方法はありますか?私はうまくいくものなら何でも完全にオープンです、少なくともエレガントなものではなく、あまり多くのオプションを見つけていません。しかし、この時点で、代替手段がなければ、私はエレガントでない解決策でも大丈夫でしょう。

4

1 に答える 1

0

コントローラーのアクション メソッドのラムダ関数を受け取るメソッド パラメーターを追加できます。

ずさんで、現在、リモート検証を FluentValidation フレームワークに統合する方法を検討しています。また何か思いついたらお知らせします。

于 2012-10-09T23:47:23.120 に答える