C# WCF REST Web服务和HTTP头

C# WCF REST Web服务和HTTP头,c#,xml,wcf,rest,http-headers,C#,Xml,Wcf,Rest,Http Headers,我创建了一个RESTWeb服务,它返回一个以xml格式传递的简单id 但是,作为返回的xml的一部分,我希望包含自定义头。我希望能够读取请求头中的数据,并在响应中返回其中的一些数据 例如,如果请求包括Header1和Header2,我希望返回Header1和Header2作为响应的一部分,同时返回一个新的头Header3 我正在努力找出在哪里以及如何做到这一点,所以任何帮助都将不胜感激 我的代码: RestServiceImpl.svc.cs: namespace RestService {

我创建了一个RESTWeb服务,它返回一个以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);

    }
}

您可以使用以下命令访问请求的标头

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
,所以请求_-Header_-Value1=
Incoming_-Req_-Header_-Value1

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

更新

我使用了以下代码

这是输出


但是您的服务有效,您可以返回ID吗?您的问题只是标题?@khlr是的,该服务在ID方面运行良好。我不确定如何读取/写入标题。如果请求包括CustomHeader1和CustomHeader2,我希望响应包括CustomHeader1、CustomHeader2和CustomHeader3谢谢。你是说ctx.OutgoingResponse.Headers吗?还有,我应该把代码放在哪里?XMLData(字符串id)中的以下代码无效。。。{System.ServiceModel.Web.WebOperationContext ctx=System.ServiceModel.Web.WebOperationContext.Current;字符串请求头\u值1=ctx.IncomingRequest.Headers[“传入请求头\u值1”].ToString();ctx.OutgoingResponse.Headers.Add(“传入请求头\u值1”,请求头\u值1);返回“您请求的产品”+id;}@kong88,是的,您是对的,它是
OutgoingResponse
,应该可以工作,让我看看。@kong88,它按预期工作。在您的情况下,如果您没有在wcf请求头中传递
传入请求头\u Key1
,它可能会中断(我的意思是,如果您不传递,那么它将为null,不会向响应头添加任何内容)。谢谢,我将尝试此操作。因此GetData方法应该是RestServiceImpl类的一部分?我应该在IRestServiceImpl中调用它,就像XMLData一样?当我调用GetData时,我应该作为值参数传入什么?