WCF REST Web服务和HTTP标头

时间:2015-01-11 18:18:16

标签: c# xml wcf rest http-headers

我创建了一个REST Web服务,它返回一个以xml格式传递的id。

但是,作为返回的xml的一部分,我想要包含自定义标头。我希望能够读取请求标头中的数据并将其中的一些返回到响应中。

例如,如果请求包含Header1和Header2,我想返回Header1和Header2作为响应的一部分,以及新的标题Header3。

我正努力找出在哪里以及如何做到这一点,所以任何帮助都会受到赞赏。

我的代码:

RestServiceImpl.svc.cs:

namespace RestService
{
    public class RestServiceImpl : IRestServiceImpl
    {
        #region iRestService Members

        public string XMLData(string id)
        {
            return "You requested product " + id;
        }

        #endregion
    }
}

IRestServiceImpl.cs:

namespace RestService
{
    [ServiceContract]
    public interface IRestServiceImpl
    {
        [OperationContract]
        [WebInvoke(Method = "GET",
            ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "xml/{id}")]
        string XMLData(string id);

    }
}

1 个答案:

答案 0 :(得分:7)

您可以使用以下方式访问请求的标题。

System.ServiceModel.Web.WebOperationContext ctx = System.ServiceModel.Web.WebOperationContext.Current;
String request_header_value1 = ctx.IncomingRequest.Headers["Incoming_Req_Header_Key1"].ToString();

此处,Incoming_Req_Header_Key1是传入标头的关键,例如Incoming_Req_Header_Key1: Incoming_Req_Header_Value1,因此request_header_value1 = Incoming_Req_Header_Value1

作为回应,您可以使用上面的字符串并将更多结果附加到响应中,例如“CustomHeader3”(只是您的示例)。如果您想将它们附加到响应标头,可以使用ctx.OutgoingResponse.Headers

来实现

<强>更新

我使用了以下代码。

enter image description here

这是输出。

enter image description here