我在 WCF 中实现了一些 REST Web 服务。当 xml 包含无效元素时,我希望这些服务返回“错误请求”。
xml 序列化由 XmlSerializer 处理。默认情况下 XmlSerializer 忽略未知元素。我知道可以挂钩 XmlSerializer.UnknownElement 并从此处理程序抛出异常,但因为这是在 WCF 中,所以我无法控制序列化。任何想法我如何实现这种行为。
我在 WCF 中实现了一些 REST Web 服务。当 xml 包含无效元素时,我希望这些服务返回“错误请求”。
xml 序列化由 XmlSerializer 处理。默认情况下 XmlSerializer 忽略未知元素。我知道可以挂钩 XmlSerializer.UnknownElement 并从此处理程序抛出异常,但因为这是在 WCF 中,所以我无法控制序列化。任何想法我如何实现这种行为。
“我知道可以挂钩 XmlSerializer.UnknownElement 并从此处理程序抛出异常,但因为这是在 WCF 中,我无法控制序列化”
它实际上可以做到这一点......
在我从事的一个 WCF 项目中,我们使用 IDispatchMessageFormatter 接口做了类似的事情。
它允许您在消息头中达到峰值,控制序列化/反序列化,返回状态代码等。
也许您可以返回您自己的实现 IXmlSerializable 的类型,并在 ReadXml 和 WriteXml 方法中抛出您想要的异常......
这是来自模糊的记忆,因为我手头没有所有代码,但是您可以创建自定义消息(继承“消息”类)类型以在 REST 服务中返回并覆盖某些方法以创建自定义响应。
protected override void OnWriteMessage(XmlDictionaryWriter writer)
{
...
}
protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
{
...
}
protected override void OnWriteStartBody(XmlDictionaryWriter writer)
{
...
}
protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
{
...
}
不是一个完整的答案,但可能会将您推向正确的道路。