使用自定义 DataAnnotationsModelValidatorProvider 进行服务器端验证

2023-12-02

我已经设置了一个自定义提供程序,以允许从数据存储而不是静态代码中设置验证属性。在我的 .NET MVC 4 项目中与客户端验证配合得很好,但我无法让服务器端验证工作。

CustomModelValidatorProvider.cs:




    public class CustomModelValidatorProvider : DataAnnotationsModelValidatorProvider
    {
        protected override IEnumerable GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable attributes)
        {
            // set attributes from datastore here

            return base.GetValidators(metadata, context, attributes);
        }
    }

  

在我的 Global.asax.cs 中,我有:




    protected void Application_Start()
    {
        ModelValidatorProviders.Providers.Clear();
        ModelValidatorProviders.Providers.Add(new CustomModelValidatorProvider());
    }

  

在 Web API 方法中我有:




    var validationResultList = new List();
    bool valid = Validator.TryValidateObject(myModelObject, new ValidationContext(myModelObject, null, null), validationResultList, true);

  

在这里,有效总是正确的。即使 Jquery 客户端验证显示错误。在服务器端,我的自定义提供程序未用于应用数据注释。当我在 GetValidators() 中设置断点时,它会在创建视图并正确显示客户端验证器时调用,但当模型绑定到控制器时不会再次调用。

我是不是漏掉了一步?任何帮助是极大的赞赏!

UPDATE

当对象被发布到 Controller 时,自定义验证器可以正常工作,但当被发布到 ApiController 时,自定义验证器不会被触发。


我终于明白了,这是一个非常简单的答案。 ApiController 仅响应 System.Web.Http.Validation 命名空间中的提供程序,而不响应用于常规控制器和客户端验证的 System.Web.Mvc 命名空间。

我实现了这两种方法,以在 ApiController 中实现客户端验证和服务器验证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自定义 DataAnnotationsModelValidatorProvider 进行服务器端验证 的相关文章

  • c# - 显示小数点到小数点后 6 位 [重复]

    这个问题在这里已经有答案了 可能的重复 具有 N 个小数位的 Double ToString https stackoverflow com questions 3059759 double tostring with n number o
  • dup2() 和 exec()

    include
  • 如何将不记名令牌发送到 ASP NET MVC 5 中的视图?

    我有一个 NET MVC and WEB API项目 我想打电话给WEB API controllers来自 javascript 但我没有找到将令牌发送到我的视图的方法 我想添加bearer token in Viewbag变量 使用以下
  • 在 C# 中轻松创建支持索引的属性

    在 C 中我发现索引属性 http msdn microsoft com en us library aa288464 VS 71 aspx非常有用 例如 var myObj new MyClass myObj 42 hello Conso
  • 当 f & g 修改同一个全局变量时,表达式 f() > g() 的值是否未定义或未指定?

    UPDATE 由用户标记ecatmur 它是重复的在 C99 中 f g 是未定义还是只是未指定 https stackoverflow com questions 3951017 in c99 is fg undefined or mer
  • WPF Dispatchertimer 延迟反应/冻结

    在我的 WPF 应用程序中 我使用 3 个不同的 DispatcherTimers 一种是用于显示当前时间 一种是每 5 秒运行一次数据库查询 第三个每 1 秒刷新一次自定义按钮的值 当我的程序运行时 有很多延迟 冻结 例如 时间开始正确计
  • 增量决策树 C++ 实现

    有谁知道决策树分类器的增量实现吗 这样 当您将新实例添加到训练集中时 它可以根据现有决策树分类器以低计算量并尽可能快地生成最佳决策树分类器 换句话说 我有一个最优决策树分类器集A 其中命名为T 1 现在我想添加实例X to set A并找到
  • 修剪 UIImage 边框

    这是我想要修剪的图像的示例 我想去掉图像周围的边框 在本例中是顶部和底部的黑条 我在Github上找到了一个库 CKImageAdditions https github com cmkilger CKImageAdditions 但是它似
  • 函数指针上的未知类型 F TYPE

    include
  • 从套接字读取 C HTTP

    我想知道如何判断是否已从套接字接收到所有数据 这是一个简单的网络代理 现在我正在处理请求部分 所以发送的内容应该以 r n r n 结尾 我不知道请求会持续多久 我在这里读过一些帖子 说我应该检查读取函数是否返回 0 但其他人说0只在客户端
  • ASP.NET中如何访问除wwwroot以外的位置

    我可以使用访问服务器的物理位置Server MapPath 这给了我内部的物理路径wwwroot文件夹 我想将一些数据保存到同一服务器的另一个驱动器中D 驾驶 我想我无法获取以下位置的物理位置D 驾驶使用Server MapPath因为它位
  • 如何从Web JavaScript应用程序获取桌面C#程序中的变量

    我遇到一个问题 有两个应用程序 一种是 C 中的桌面应用程序 另一种是 javascript 中的 Web 应用程序 运行桌面应用程序中的一些变量或信息需要传输到Web应用程序 有谁知道如何解决这个问题 有人愿意提供更多细节来解决这个问题吗
  • Identity Server 4:添加访问令牌的声明

    我正在使用 Identity Server 4 和隐式流 并且想要向访问令牌添加一些声明 新的声明或属性是 tenantId 和 langId 我已将 langId 添加为我的范围之一 如下所示 然后通过身份服务器请求 但我也获得了tena
  • 三种 System.Drawing 方法表现出缓慢的绘制或闪烁:解决方案?或其他选择?

    我正在通过 System Drawing 进行一些绘图 但遇到了一些问题 我将数据保存在队列中 并将该数据绘制 绘制 到三个图片框中 此方法填充图片框 然后滚动图形 所以不要在以前的绘图上绘制 并且逐渐看起来更混乱 我找到了两种绘制图表的解
  • 为什么我无法调试动态加载的程序集?

    我正在开发一个 Web API 项目 该项目使用内部模拟框架 允许拦截和修改来自控制器的响应 它使用 MEF 加载包含某些先决条件匹配时执行的代码的程序集 我知道这是正常工作的 因为我可以在响应中看到模拟已被执行 但由于某种原因我无法调试动
  • C++ 联合数组和变量?

    在C 中没有办法做这样的事情吗 union Scalar x y Scalar v 2 Where x v 0 and y v 1 既然您使用的是 C 而不是 C 并且它们具有相同的类型 为什么不直接将 x 设为对 v 0 的引用 将 y
  • Gridview 错误:对 Bind 的调用格式不正确

    我有以下 gridview 代码
  • C# 3.0 中自动属性和公共字段的区别

    我无法理解为什么 C 3 0 中存在自动实现的属性语言功能 当你说的时候有什么区别 public string FirstName than public string FirstName get set 因为它们在生成的 IL 代码 和机
  • 使用 MVC5、Ajax、C# 和 MSSQL Server 级联 DropdownList

    我对来自 Windows 窗体和三层架构的 MVC 非常陌生 我试图找出使用从数据库填充的级联下拉列表 DDL 我使用 MS SQL Server 2012 VS 2013 目前我正在研究用户调查问卷 用户可以从 DDL 的多个答案中进行选
  • char[length]初始化并处理

    我定义了一个字符数组 char d 6 如果我在以下方面有误 请纠正我 此时没有为变量分配内存d 现在我要初始化它 d aaaaa 这种初始化之后 就不需要释放内存了 它将自动完成 我怎么知道是否char 被初始化了吗 我正在寻找类似的模式

随机推荐

  • 展平非常嵌套的循环[重复]

    这个问题在这里已经有答案了 如果我有一组像这样的循环 x for a in x 0 for b in x 1 for c in x 2 Do something with a b c 有没有一种简单的方法可以简化它 特别是当它有更多级别时
  • 类变量函数

    Say this gt varname等于一个字符串 其中is callable 返回真 要调用它我必须做 temp this gt varname temp 或者 有另一种方法可以调用它而不必创建两行吗 只做的问题 temp this g
  • 当对象确实是字符串时,强制转换与将对象转换为字符串

    这并不是一个真正的问题 但我很好奇 当我将字符串保存在 DataRow 中时 它会被转换为 Object 当我想使用它时 我必须将它转换为ToString 据我所知有几种方法可以做到这一点 第一种是 string name string D
  • 如果类是在带有元注释的组件之后定义的,则该类不可注入

    我刚刚开始 Angular2 快速启动项目 让一个简单的应用程序运行起来 我添加了DataService类 这样代码就会有关注点分离 最初我添加了DataService类在我的应用程序主要组件之后编写 即MyAppComponent像下面这
  • Android开发-getMenuInflater(R.menu.main, menu)

    我正在学习 android 并遵循简单的相机应用程序教程 我复制了一段代码 但出现错误 我不知道为什么 我正在使用的教程是 http iwearshorts com blog android development 102 代码片段是 Ov
  • Windows Phone 7 用户扩展属性

    被引导到这里后 http msdn microsoft com en us library microsoft phone info userextendedproperties getvalue 28v VS 92 29 aspx 我在侧
  • Azure Active Directory 发布注销 URL

    我希望在用户注销 Azure AD Office 365 时将他们重定向到我的应用程序网页 虽然根据来自的文档https greeneyeits com p 520 我们可以在那里编辑注销后链接 URL 并在用户注销 Azure AD Of
  • 如何在PowerShell中使用Windows API AuditEnumerateCategories函数?

    我想得到当前的高级安全审核策略使用 PowerShell 我可以用auditpol exe 但其输出因操作系统语言而异 这使得解析变得困难 The settings存储在 REG NONE 值中HKEY Local Machine Secu
  • 用于计算某些值在多行中出现的次数的 SQL 查询

    假设我有一个选举数据表 将其称为 选举 每次选举每个选民一行 如下所示 VoterID ElectionID A 1 A 2 B 1 C 2 D 3 E 1 E 2 我想知道在选举 1 和选举 2 中都投票的选民人数 我不关心其他人 该数字
  • 如何将 Laravel 变量传递到我的 AngularJS 视图中?

    我正在构建一个小型照片应用程序来学习 AngularJS 1 3 我有 PHP 背景 所以从概念上来说这对我来说是相当不同的 我想将一个变量 我的照片文件夹的 URL 传递到我的 AngularJS 视图 一个 html 文件 中 我怎样才
  • 更新站点时 git hook 出现问题

    我在服务器上建立了一个网站并使用git来维护它 为此 我创建了两个 git 存储库 其中一个位于 HOME site我推向一个非裸的 var www每次进行更改时都应该从裸存储库中提取 为了自动更新非裸存储库 我创建了一个并授予执行权限po
  • android 在 ndk/JNI 的 cc/c++ 中获取 IMEI

    我会尝试得到imei使用 C C 使用 ndk 获取设备的数据并使用 JNI 检索结果 const char res exec get out service call iphonesubinfo 3 在 shell 中工作 但在我的应用程
  • 如何进行git克隆并进入创建的目录

    How to git clone一个项目 然后cd一次进入新创建的目录 git clone http xxx optional folder name cd
  • Z3是否支持优化问题

    我在去年八月份的一篇文章中看到Z3不支持优化 但它也表示 开发人员正计划添加此类支持 我在来源中找不到任何表明发生这种情况的内容 谁能告诉我我关于没有支持的假设是否正确 或者是否已添加但我不知何故错过了它 谢谢 奥马尔 如果您的优化具有整数
  • 函数打印正确的输出和无

    我定义了这个函数 它接受一个单词和一串必需的字母 并且如果该单词至少使用一次所有必需的字母 则返回 True 当我运行它时 它给出了正确的输出 但我不明白为什么它也输出 无 这是我的代码 def uses all word allused
  • 在 Parse 中保存多个对象并接受超过 1 个 API 请求?

    据我从 Parse 文档可以看出堆栈溢出 the PFObject saveAllInBackground只需要 1 个 API 请求即可保存所有对象 我的方法保存一个对象 然后返回并saveAll还有 2 个物体 这看起来应该只需要 2
  • Android 操作栏中 Activity 的中心标题

    现在我的活动标题在左侧显示为 lt Title然后另一个菜单项显示在右侧 我想将标题居中并省略 lt 我怎么做 我正在使用典型的菜单 我称之为使用 public boolean onOptionsItemSelected MenuItem
  • 在 POI 中合并后为单元格设置值

    我想在 POI 中形成如下的 excel 输出 从图像中可以清楚地看出 我分别在 Header3 Header4 和 Header5 下各有 3 个子列 名单如下 ListA 包含 A 列的值 列表 包含 B 列的值 List1 是数据库行
  • 如何在 C++ 中对向量进行排序和排名(不使用 C++11)

    我正在尝试构建一个函数 它接受一个向量 对其进行排序 对其进行排序 并输出排序和排序的向量以及值的原始定位 例如 输入 10 332 42 0 9 0 输出 3 5 4 2 1 我使用了这个堆栈溢出question 特别是马吕斯的答案 作为
  • 使用自定义 DataAnnotationsModelValidatorProvider 进行服务器端验证

    我已经设置了一个自定义提供程序 以允许从数据存储而不是静态代码中设置验证属性 在我的 NET MVC 4 项目中与客户端验证配合得很好 但我无法让服务器端验证工作 CustomModelValidatorProvider cs public