我在WCF中实现了一些REST Web服务。我希望当xml包含无效元素时,使这些服务返回“错误请求”。
xml序列化由XmlSerializer处理。默认情况下,XmlSerializer会忽略未知元素。我知道可以挂钩XmlSerializer.UnknownElement并从此处理程序中抛出异常,但因为这是在WCF中我无法控制序列化。任何想法如何实现这种行为。
答案 0 :(得分:2)
“我知道可以挂钩XmlSerializer.UnknownElement并从此处理程序中抛出异常,但因为这是在WCF中我无法控制序列化”
实际上可以这样做......
在我工作的WCF项目中,我们使用IDispatchMessageFormatter接口做了类似的事情。
它允许您在消息标题处达到峰值,控制序列化/反序列化,返回状态代码等。
答案 1 :(得分:1)
也许你可以返回你自己的类型实现IXmlSerializable并在ReadXml和WriteXml方法中抛出你想要的异常......
答案 2 :(得分:1)
这是来自模糊的内存,因为我没有掌握所有代码,但您可以创建自定义消息(继承类“Message”)类型以在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)
{
...
}
不是一个完整的答案,但可能会让你走上正确的道路。