EnumDataType() 属性验证错误消息未显示

2023-11-27

在我的 .net core 2.0 Web API 中,我在模型属性上使用 EnumDataType() 验证属性。当验证失败时,自定义错误消息为空。我不确定为什么会发生 -

[EnumDataType(typeof(MyEnum), ErrorMessage = "Custom Error Message")]
public MyEnum MyEnumProp {get; set;}

我检查了其他具有 [Required]、[MinLength] 的属性,并且所有属性都生成自定义错误消息。难道我做错了什么?还有其他方法吗?


在反序列化和验证阶段检测到的错误之间经常发生混淆。

假设您有以下内容enum:

public enum MyEnum
{
    None,
    Value1,
    Value2
}

以及以下模型:

public class TestModel
{
    [Required]
    public int? Id { get; set; }

    [EnumDataType(typeof(MyEnum), ErrorMessage = "Custom Error Message")]
    public MyEnum MyEnumProp { get; set; }
}

当您发布数据时:

{
  "Id": 123,
  "MyEnumProp": "UnexistingEnumValue"
}

该错误将在反序列化阶段发生(在本例中为 Json.NET)。反序列化器无法转换字符串"UnexistingEnumValue"到一些值MyEnum。 在这种情况下,解串器将注册以下模型绑定错误:Requested value 'UnexistingEnumValue' was not found.

ModelState.IsValid将被设置为false,但是价值MyEnumProp将保留其默认值MyEnum.None。验证执行者EnumDataType属性不会检测到任何错误,因为MyEnum.None是一个有效值MyEnum。这就是为什么你不会看到"Custom Error Message" in ModelState errors.

现在,如果您发布以下数据:

{
  "Id": 123,
  "MyEnumProp": 5
}

在反序列化阶段不会发生错误,因为以下分配是相当合法的,即使它没有多大意义:

MyEnum v = (MyEnum)5;

因此解串器不会检测到任何错误。然而现在EnumDataType验证开始发挥作用。它检测到5不是有效值MyEnum. ModelState.IsValid被设定为false以及中指定的错误消息EnumDataType.ErrorMessage已登记 ("Custom Error Message").

如果您希望反序列化和验证错误具有相同的自定义消息,则应提升到反序列化器 (Json.NET) 级别并使用其扩展点来实现此目的。

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

EnumDataType() 属性验证错误消息未显示 的相关文章

  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 如何最好地以编程方式将 `__attribute__ ((unused))` 应用于这些自动生成的对象?

    In my makefile我有以下目标 它将文本 HTML 资源 编译 为unsigned char数组使用xxd i http linuxcommand org man pages xxd1 html 我将结果包装在匿名命名空间和标头保
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • 如何从 C 运行外部程序并解析其输出?

    我有一个实用程序 可以输出游戏所需的文件列表 如何在 C 程序中运行该实用程序并获取其输出 以便我可以在同一程序中对其进行操作 更新 关于缺乏信息的好呼吁 该实用程序会输出一系列字符串 这应该可以跨 Mac Windows Linux 移植
  • 适用于 .NET 的 HTML 到 PDF 转换器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在寻找一个适用于 NET 的免费 HTML 到 PDF 转换器它最好采用 HTML 页面并将其呈现为 PDF 文档 HTML 页面 打印时 将通常不止一页 我知道 ABCPDF
  • 两个日期之间的天数? [复制]

    这个问题在这里已经有答案了 查看两个日期之间过去了多少天的最短方法是什么 这就是我现在正在做的事情 math floor b a total seconds float 86400 假设您实际上有两个日期对象 您可以从另一个中减去一个并查询
  • 查询与 activerecord 的交集

    我真的很想在活动记录的帮助下执行以下查询 select from people p join cities c join services s where p city id c id and p id s person id and s
  • rql 从 javascript 中的键 rethinkdb 列表中获取多个文档

    我有一个 人 数据表 它有一个唯一的键 id 我有一个 id 列表 我想获取这些数据 并将其作为 JSON 数组从客户端发送到服务器 服务器以 JSON 数组的形式接收该数据 现在有没有一种方法可以运行查询来获取每个 id 的文档 或者是我
  • DOM:获取文档中的所有文本节点(PHP)

    我有以下 PHP 代码 它遍历整个 DOM 文档以获取所有文本节点 这是一个有点丑陋的解决方案 我确信一定有更好的方法 那么 有吗 skip false node document nodes array while node if nod
  • 在内存耗尽之前,GC 不应该在 Xamarin.Android 中自动运行吗?

    我花了几乎一整天的时间试图找出 Android 内存泄漏的原因 有一个活动我打开 关闭很多次 使用计时器 一段时间后 我收到了 OutOfMemory 错误 每次活动打开时 我都会在 Xamarin Profiler 中看到内存不断增加 我
  • 为什么我们应该使用 Exception 作为超类,为什么不使用 BaseException

    在Python中 每当我们编写用户定义的异常时 我们都必须从类扩展它Exception 我的问题是为什么我们不能把它从BaseException这是异常层次结构的超类 Exception也是以下子类BaseException BaseExc
  • RestTemplate + 杰克逊

    我想使用Spring的RestTemplate加上Jackson来消费WebService 我遵循了几个教程 现在已经到了创建 DAO 的阶段 这是我获取所有域对象的方法 Create a Rest template RestTemplat
  • 在 $_GET 变量中添加空格有什么问题

    例如 如果我的网址看起来像index php category IT 20 20Soft 然后我尝试打印 GET category 我只得到 IT 而不是 IT Soft 这里有什么问题吗 这让我很沮丧 问题不在于空格 而在于 符号 Use
  • 类是否在 lambda 表达式中实例化? [复制]

    这个问题在这里已经有答案了 我有以下方法调用 其中传递了 lambda 表达式 这里是否隐式实例化了一个类 printStudents roster Student s gt s getGender Student Sex MALE s g
  • jdbc.SQLServerException:任何用户的用户登录失败

    我试图测试与本地 sql 数据库的连接 我有这个代码 try Class forName com microsoft sqlserver jdbc SQLServerDriver newInstance DriverManager getC
  • 加载 Dicom 图像并显示它 - 使用 ClearCanvas 库

    这是一个非常狭窄和具体的问题 但我知道还有其他人在使用这个问题 所以我会祈祷并希望你们中的任何人都能提出这个问题 我正在开发一个 WPF 应用程序 其中一部分是 Dicom 查看器 我们希望使用第 3 方组件来处理 Dicom 内容 而 C
  • 如何水平居中未知宽度的无序列表?

    页脚中通常有一组以列表形式表示的链接 例如 div ul li a href Home a li li a href About a li li a href Contact a li ul div 我希望 div footer 内的所有内
  • 自定义 NewtonSoft.Json 以进行值对象序列化[重复]

    这个问题在这里已经有答案了 有时 也许在 DDD 情况下 您可能希望使用 C 创建值对象来表示数据 以便为您的领域赋予比使用基本类型更多的含义 并具有不可变的额外好处 例如 public class PostalCode Bit like
  • Google 电子表格脚本将 A 列中包含“Hello”的单元格与 B 列中的相邻单元格合并

    我正在尝试将 A 列中包含某个单词的单元格 例如 Hello 与紧邻右侧的单元格 B 列中 合并 E g A4 Hello 因此我想合并单元格 A4 和 B4 到目前为止我有这个代码 function formatCells var ss
  • 在闭包中,什么触发捕获变量的新实例?

    我正在读乔恩 斯基特的书C 深入探讨 在第 156 页 他有一个示例 清单 5 13 使用多个委托捕获多个变量实例 List
  • 迭代 Polars Rust 行

    我正在尝试迭代 Polars rust 数据帧的每一行 在这次努力中 我发现df get但文档说这很慢 然后我尝试过df column col get但这似乎也带来了类似的问题 处理数据帧每一行的正确方法是什么 我需要将其上传到数据库并将其
  • 不可变的 numpy 数组?

    有没有一种简单的方法来创建不可变的 NumPy 数组 如果必须从中派生一个类ndarray为此 为了实现不变性而必须重写的最少方法集是什么 您可以使 numpy 数组不可写 a np arange 10 a flags writeable
  • EnumDataType() 属性验证错误消息未显示

    在我的 net core 2 0 Web API 中 我在模型属性上使用 EnumDataType 验证属性 当验证失败时 自定义错误消息为空 我不确定为什么会发生 EnumDataType typeof MyEnum ErrorMessa