【问题标题】:C# MVC/API Custom Validation Trigger - One Field OnlyC# MVC/API 自定义验证触发器 - 仅一个字段
【发布时间】:2022-10-05 07:55:10
【问题描述】:
我有一个 API 模型字段,我希望通过任何可能的方法对其进行自定义验证。
我需要的解决方案是:在该特定字段的模型状态验证失败 - 我想运行自定义代码来修改该字段的值。
由于代码库,我正在处理一些限制:
验证触发代码必须在模型内部或以某种方式绑定到它。
为整个模型创建自定义验证器对我来说是不合理的。
我将代码放在!modelstate.valid 的控制器中是不合理的
【问题讨论】:
标签:
c#
asp.net-mvc
api
asp.net-web-api
web-applications
【解决方案1】:
我的问题是我认为您不能将注释与自定义验证混合和匹配。你可以。
让你的类继承 IValidatableObject
public class MyClass : IValidateableObject
{
}
添加验证方法 - “FieldName”是您正在验证的类变量
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(your_condition_is_invalid)
{
yield return new ValidationResult(errorMessage: "your error message", memberNames: new[] { "FieldName" }
}
}
以下不适用于此问题,但我认为包括在内。
不利的一面是,据我询问的人说,如果您使用的是 web 应用程序,则在某些情况下您需要编写自定义前端验证。
它不会自动与默认的 mvc 前端验证/jquery 不显眼地啮合。
如果您打算为具有严格前端验证标准的应用程序执行此操作,那么请准备好为该字段编写验证器。