3

这更像是一个问题,而不是一个技术问题,需要关于验证 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 验证的正常方式吗?

4

1 回答 1

1

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

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

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

在 XSD 中放置尽可能多的验证约束,但也要保留不适合那里的检查——第二级验证可能是有价值和实用的。

于 2013-11-09T00:36:31.027 回答