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

Posted

技术标签:

【中文标题】FluentValidation 和服务器+客户端远程验证器【英文标题】:FluentValidation and server+client remote validator 【发布时间】:2012-09-25 20:49:31 【问题描述】:

我正在尝试为 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 => m.FirstName)values是一个文字值数组

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

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

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

我不知道如何从验证器的IsValid 方法调用相同的控制器操作。

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于FluentValidation 和服务器+客户端远程验证器的主要内容,如果未能解决你的问题,请参考以下文章

csharp FluentValidation作为服务.Net Core 2

模型验证组件 FluentValidation

模型验证组件 FluentValidation

FluentValidation 和实体框架查找

在对话框中使用 FluentValidation 和 MudBlazor 进行表单验证

使用 WebApi [Route] 属性时 FluentValidation 不起作用