gpt4 book ai didi

c# - 传入 XML 的验证 - 我是否应该同时使用 XSD 文件和代码验证

转载 作者:数据小太阳 更新时间:2023-10-29 02:41:01 25 4
gpt4 key购买 nike

这更像是一个问题,而不是一个技术问题,寻求有关验证 XML 的最佳方法的建议。

我有一个用 C# 编写的 Web 服务,它接受传入的 Xml 请求。

目前我正在根据我的 XSD 模式验证传入的 Xml。这工作正常,我可以捕获任何错误并使用适当的消息进行响应。

此外,我有以下函数,我可以将我的对象传递给它,以验证所有属性;

    private List<ValidationResult> Validate(object oObject)
{
var results = new List<ValidationResult>();
var context = new ValidationContext(oObject, serviceProvider: null, items: null);
Validator.TryValidateObject(oObject, context, results, false);
return results;
}

然后我验证定义的元素;

    [Required]
[StringLength(175)]
public string Name{ get; set; }

该函数返回发现的所有错误的字符串列表。

如果 XSD 架构和类属性在验证要求方面是同步的,那么我的代码似乎永远不会在函数中返回结果列表

private List<ValidationResult> Validate(object oObject)

因为 XSD 模式阻止代码到达那个点。

这是执行 XML 验证的正常方式吗?

最佳答案

是的,根据请求执行两种类型的验证(XSD 验证和特定于应用程序的验证)是正常的。

XSD 是请求预期的可共享(和可执行)规范。能够根据 XSD 的共享规范自动通知客户请求问题是一个胜利。

但是,某些检查不能在 XSD 中表达(不方便或根本不表达)。例如,对于 XSD 1.0,请参阅 XSD 1.1 的 xs:assertion 的所有激励示例。即使对于 XSD 1.1,在某些情况下,可能有必要或更愿意对 XSD 的带外请求实现检查。例如,当服务以某种方式实现时,可能需要执行级别的检查,但服务接口(interface)不需要永久承担检查的负担。或者可能会利用一些复杂的现存程序代码来检查请求的某些方面,并且在 XSD 中以声明方式表达可能是不可能的或笨拙的。

在 XSD 中放置尽可能多的验证约束,但也保留不适合在那里的检查——第二级验证可能很有值(value)且实用。

关于c# - 传入 XML 的验证 - 我是否应该同时使用 XSD 文件和代码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19867217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com