FluentValidation和服务器+客户端远程验证器

时间:2012-10-04 18:40:23

标签: c# asp.net-mvc asp.net-mvc-3 validation fluentvalidation

我正在尝试为FluentValidation构建一个通用的远程验证器扩展,类似于this thread中讨论的内容。在this blog中发布了客户端解决方案,但我需要远程验证器才能在客户端和服务器端工作。

规则看起来像这样:

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

其中:
actioncontroller是操作/控制器的名称 properties是一个模型属性表达式数组(m =&gt; m.FirstName)
values是一个文字值数组

为验证器设置规则可能如下所示:

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

我想我可以找出客户端部分,因为我将构建一个jQuery适配器来调用action方法,传入值。

我无法弄清楚的是,从验证器的IsValid方法调用相同的控制器操作。

以下是我考虑的一些选项:

  • 以某种方式远程调用控制器操作,创建存根上下文。不知道如何使用IoC注入依赖项。服务定位器?

  • 使用普通的.NET方法,并从验证器和操作方法中调用它。

我认为这将是一个强大的验证器可用,但似乎我提出的任何选项将是丑陋的,即使我设法让它工作。

有没有更好的方法来解决这个问题?我对任何有用的东西都是开放的,我只是找不到很多选择,至少不是优雅的选择。但是在这一点上,如果没有替代方案,我甚至可以使用非优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以添加一个额外的方法参数,该参数接受Controller的操作方法的lambda函数。

它很草率,我正在研究将远程验证集成到FluentValidation框架的方法。如果我拿出别的东西,我会告诉你的。