如何使用 OperationContract 从 POST 请求中捕获响应 header?
How do I use OperationContract to capture a response header from POST request?
我有以下 WCF 包装器来调用 REST 服务:
[DataContract]
public class InterestingResponse : IExtensibleDataObject
{
[MessageHeader(Name="x-interesting-id")]
public string InterestingId { get; set; }
public ExtensionDataObject ExtensionData { get; set; }
}
[ServiceContract()]
public interface IManagement
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = @"somePathHere")]
InterestingResponse DoInteresting();
}
正在向服务发送请求并成功完成。 HTTP 响应有空 body 和 x-interesting-id
header。我希望客户端代码 return InterestingResponse
的一个实例,其中 InterestingId
被设置为来自响应的 x-interesting-id
的值。
一旦 IManagement.DoInteresting()
return 在客户端上空引用被 returned 因为好吧,响应是空的,我猜没有什么可以反序列化。
如何将 object returned 与 header 值反序列化为 object 成员?
将System.ServiceModel.Channels.Message
用作here。将方法声明更改为:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = @"somePathHere")]
Message DoInteresting();
然后一旦调用完成,Message
object 将包含带有 HTTP headers:
的 HTTP 响应
var invokationResult = service.DoInteresting();
var properties = message.Properties;
var httpResponse =
(HttpResponseMessageProperty)properties[HttpResponseMessageProperty.Name];
var responseHeaders = httpResponse.Headers;
var interestingHeader = reponseHeaders["x-interesting-id"];
我有以下 WCF 包装器来调用 REST 服务:
[DataContract]
public class InterestingResponse : IExtensibleDataObject
{
[MessageHeader(Name="x-interesting-id")]
public string InterestingId { get; set; }
public ExtensionDataObject ExtensionData { get; set; }
}
[ServiceContract()]
public interface IManagement
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = @"somePathHere")]
InterestingResponse DoInteresting();
}
正在向服务发送请求并成功完成。 HTTP 响应有空 body 和 x-interesting-id
header。我希望客户端代码 return InterestingResponse
的一个实例,其中 InterestingId
被设置为来自响应的 x-interesting-id
的值。
一旦 IManagement.DoInteresting()
return 在客户端上空引用被 returned 因为好吧,响应是空的,我猜没有什么可以反序列化。
如何将 object returned 与 header 值反序列化为 object 成员?
将System.ServiceModel.Channels.Message
用作here。将方法声明更改为:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = @"somePathHere")]
Message DoInteresting();
然后一旦调用完成,Message
object 将包含带有 HTTP headers:
var invokationResult = service.DoInteresting();
var properties = message.Properties;
var httpResponse =
(HttpResponseMessageProperty)properties[HttpResponseMessageProperty.Name];
var responseHeaders = httpResponse.Headers;
var interestingHeader = reponseHeaders["x-interesting-id"];