我有一些像这样实现的REST Web服务:
[ServiceContract]
public interface IRESTService
{
[WebGet(UriTemplate = "GetEveryone", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
EveryoneDTO GetEveryone();
}
public class RESTService : IRESTService
{
public EveryoneDTO GetEveryone()
{
// [...] Some processing
return everyone;
}
}
我的everyone
对象在哪里?我的意思是,它必须发生一些事情来将对象转换为JSON并发送它们。我的诽谤不再引导我。
我对此感兴趣,因为,我想说,我想处理我发回的每个对象中包含的每个字符串(可能是出于编码目的),我将如何/在哪里实现拦截每个对象并在发送之前能够轻松改变它们的中间件?
答案 0 :(得分:1)
一个好的解决方案是实现自定义消息检查器 您可以实现两个接口,具体取决于客户端或服务器端:
客户端为 IClientMessageInspector
,服务器为IDispatchMessageInspector
。您可以在同一个类和程序集上实现它们并使用更方便的方法,因为消息检查器是扩展,您可以配置(例如,Web.config)您想要使用它。
IDispatchMessageInspector
实现了AfterReceiveRequest
和BeforeSendReply
方法,因此您可以在收到请求时和发送回复之前拦截邮件,这对您的方案非常有用。
一个简单的实施例子:
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
request = buffer.CreateMessage();
var m = buffer.CreateMessage().ToString();
return null;
}
请注意,您必须复制原始邮件,以便提取XML并将对象转换为pourpose(日志,更改等)
答案 1 :(得分:0)
如果我理解得很好,您希望在将WCF数据输出发送给您的客户之前拦截它。
有多种方法可以做到这一点,下面链接中的内容就是其中之一:
https://www.codeguru.com/csharp/.net/net_wcf/learn-to-create-interceptors-in-wcf-services.htm
希望有所帮助