问题标签 [modelstatedictionary]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
validation - 如何在 ASP.NET Core 中为 JsonPatch 应用部分 ModelState 验证
我一直在努力解决一个问题,即如果您在 ASP.NET Core 中使用数据注释进行模型验证并运行patchDoc.ApplyTo(newData);
,然后if (!TryValidateModel(newData))
您会遇到补丁文档中未包含的操作的模型验证错误。
如果一个属性之前为 null 并且它有一个[Required]
属性,它将给出模型状态验证错误,尽管我没有在补丁文档中包含该属性。
c# - ModelStateDictionary - 识别不应返回给调用者的错误
我有一个简单的 Web API,它使用验证属性执行一些基本验证。如果请求不满足验证要求,我会从中提取错误消息ModelStateDictionary
并将其作为字典返回给调用者,其中键是出现错误的属性的路径,消息指示问题所在。
问题是,给定某些输入,错误消息ModelStateDictionary
通常包含我不想返回给客户端的信息(例如转换器尝试将 JSON 映射到的对象的全名(包括命名空间)) .
是否可以区分验证错误(由 Validation Attributes / IValidatableObject 实现生成)和尝试将无效 JSON 映射到某个对象而生成的错误?
例如:
我的模型
我的操作方法
我的示例输入:
- 缺少所需数据
因为Customer.Name
用 装饰RequiredAttribute
,这会生成以下错误消息:
这可以返回给调用者,所以这里没有问题。
- JSON 值不映射到 .Net 对象类型
由于将值反序列化为123
对象Customer
失败,因此会生成以下错误消息:
这不能返回给调用者,因为它包含映射到的对象的完整命名空间路径。在这种情况下,应该使用通用的东西(例如"Bad JSON value.")作为错误消息。
谁能帮我找到隐藏这些错误消息的解决方案,这些错误消息包含不应返回给调用者的信息?
从上面的代码中可以看出,我认为我可以检查ModelEntry.Exception
属性并使用它来确定是否需要对调用者屏蔽错误消息,但在我的两个示例中都是 null。
解决方案可能是检查错误消息是否以 开头Error converting value
,如果是,则屏蔽来自调用者的消息。这似乎不是很健壮,我不确定这在现实世界的例子中有多可靠。