【发布时间】:2012-05-22 23:21:05
【问题描述】:
我编写了一个供第三方使用的 WCF REST API。我想做的一件事是在出现任何问题时向客户返回自定义错误响应。我不希望 WCF 默认错误页面显示发生内部服务器错误或找不到方法名称。
为此,我会在必要时抛出WebFaultException<Error>。这会向客户端返回以下类型的响应:
<Error>
<type>MissingTag</type>
<Desc>Tag 349 is missing</Desc>
</Error>
但是,如果发生任何其他类型的错误,例如序列化错误或“找不到方法”错误或我想检查 POST、PUT 和 PATCH 是否存在 http 标头内容类型的地方,我该如何处理。我也想在那里扔WebFaultException<>。我尝试查看IErrorHandler,但无法正常工作。
任何人都知道如何实现这种类型的东西。我也可以有一个简单的代码来演示IErrorHandler 的用法吗?
【问题讨论】:
-
您是否尝试过查看 MessageInspectors BeforeSendReply 事件:msdn.microsoft.com/en-us/library/aa717047.aspx
-
@Rajesh,是的,我有。但是如果 POST 方法没有定义内容类型,则不会调用它,并且序列化异常仍然未被捕获。
-
我认为任何成功或异常的响应都会触发 BeforeSendReply 事件,如果需要,您可以在那里自定义响应。你试过了吗
-
@Rajesh,是的,我有。如果在管道中发生 SerializationException,则不会调用它。
-
你是指请求时的serializationException吗?如果是这样,那么您需要查看 AfterRecieveRequest 事件