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

标签 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 是 Action / Controller 的名称
properties 是模型属性表达式的数组 (m => m.FirstName)
values 是文字值数组

为验证器设置规则可能看起来像这样:

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

我想我可以弄清楚客户端部分,因为我将构建一个 jQuery 适配器来调用操作方法,传递值。

我想不通的是如何从验证器的 IsValid 方法调用相同的 Controller 操作。

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

  • 以某种方式远程调用 Controller 操作,创建 stub 上下文。不确定如何使用 IoC 注入(inject)依赖项。服务定位器?

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

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

有没有更好的方法来解决这个问题?我对任何可行的东西都持开放态度,我只是找不到太多选择,至少不是优雅的选择。但在这一点上,如果没有其他选择,我什至可以接受一个不优雅的解决方案。

最佳答案

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

这很草率,我目前正在研究将远程验证集成到 FluentValidation 框架中的方法。如果我有任何其他想法,我会通知您。

关于c# - FluentValidation 和服务器+客户端远程验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12733679/

相关文章:

c# - WPF TreeView 和目录树数据绑定(bind)

c# - 编写一个通用的 FluentValidation 自定义验证器来检查唯一约束

asp.net-mvc-3 - 并发请求时的 ASP.NET(或 IIS?)行为

c# - 在文件夹中查找具有相同名称但扩展名不同的文件

C# 查找两个纬度/经度的中点

asp.net-mvc - 什么是 ASP.Net MVC View 引擎?

jquery - 设置yearRange后: '-90:-15' Jquery Datepicker picking current Year(initially) why?

c# - 带有路由 id 参数的 Html.BeginForm 并在提交时获取参数?

c# - 以正确的顺序循环遍历 groupBox 控件

asp.net-mvc - MVC 3 - 访问 IEnumerable 模型的 ModelMetaData?