【问题标题】:Customize WCF Rest error responses自定义 WCF Rest 错误响应
【发布时间】: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&lt;&gt;。我尝试查看IErrorHandler,但无法正常工作。

任何人都知道如何实现这种类型的东西。我也可以有一个简单的代码来演示IErrorHandler 的用法吗?

【问题讨论】:

  • 您是否尝试过查看 MessageInspectors BeforeSendReply 事件:msdn.microsoft.com/en-us/library/aa717047.aspx
  • @Rajesh,是的,我有。但是如果 POST 方法没有定义内容类型,则不会调用它,并且序列化异常仍然未被捕获。
  • 我认为任何成功或异常的响应都会触发 BeforeSendReply 事件,如果需要,您可以在那里自定义响应。你试过了吗
  • @Rajesh,是的,我有。如果在管道中发生 SerializationException,则不会调用它。
  • 你是指请求时的serializationException吗?如果是这样,那么您需要查看 AfterRecieveRequest 事件

标签: c# wcf rest wcf-rest


【解决方案1】:

您可以查看Message InspectorsBeforeSendReply 以自定义需要发送给客户端的回复

如果在发出请求时未设置内容类型,您可以查看 AfterReceiveRequest,您可以在其中自定义收到的请求,然后根据需要进行操作。

【讨论】:

    猜你喜欢
    • 2015-09-04
    • 2020-07-25
    • 2018-11-08
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 2016-09-29
    相关资源
    最近更新 更多