我正在嘗試爲FluentValidation構建一個通用遠程驗證程序擴展,類似於this thread中討論的內容。在this blog中發佈了客戶端解決方案,但我需要遠程驗證程序來同時處理客戶端和服務器端。FluentValidation和服務器+客戶端遠程驗證程序
該規則將看起來像這樣:
IRuleBuilderOptions<T, TProperty> Remote(string action,
string controller,
Expression<Func<T, object>>[] properties,
IComparable[] values,
HttpVerbs httpVerb = HttpVerbs.Get);
其中:
action
和controller
是動作/控制器
properties
的名稱是模型屬性表達式(M =>米的陣列。名字)
values
是一個文字值數組
設置驗證器的規則可能看起來像t他:
this.RuleFor(m => m.Username).Remote("UsernameUnique", "RemoteController", null, null);
我想我可以找出客戶端的一塊,我將只是建立一個jQuery適配器調用操作方法,傳遞價值。
我弄不清楚的是,從驗證器的IsValid
方法到如何調用相同的控制器操作。
這裏有一些選擇,我認爲:
不知怎的,遠程調用控制器動作,創建一個存根上下文。不知道如何使用IoC注入依賴關係。服務定位器?
使用普通的.NET方法,並從驗證器和操作方法中調用該方法。
我認爲這將是一個強大的驗證有可用的,但它似乎像任何選項我想出將是醜陋的,即使我設法得到它的工作。
有沒有更好的方法來解決這個問題?我對任何可以工作的東西都完全開放,我只是沒有找到很多選擇,至少不是很優雅的選擇。但是,在這一點上,如果沒有其他選擇,我甚至可以用非優雅的解決方案。