2015-01-11 2 views
2

xml 형식으로 전달 된 단순한 ID를 반환하는 REST 웹 서비스를 만들었습니다.WCF REST 웹 서비스 및 HTTP 헤더

그러나 반환 된 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); 

    } 
} 
+0

그러나 서비스 작품을하는 한, 당신은 ID를 반환 할 수? 문제가되는 헤더 일뿐입니다. – khlr

+0

@khlr 예, 서비스는 ID 측면에서 잘 작동합니다. 헤더를 읽거나 쓰는 방법을 모르겠습니다. 요청에 CustomHeader1 및 CustomHeader2가 포함 된 경우 CustomHeader1, CustomHeader2 및 CustomHeader3을 포함하도록 응답을 보내주십시오. – kong88

답변

4

당신은 folowing을 사용하여 요청 헤더에 액세스 할 수 있습니다. 여기

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 정도로 request_header_value1 = Incoming_Req_Header_Value1, Incoming_Req_Header_Key1: Incoming_Req_Header_Value1 같은 수신 헤더의 핵심이다.

응답으로 위의 문자열을 사용하고 "CustomHeader3"(예를 들어 귀하의 예)과 같은 결과를 응답에 추가 할 수 있습니다. 응답 헤더에 추가하려면 ctx.OutgoingResponse.Headers을 사용하면됩니다.

UPDATE는

나는 다음 코드를 사용하고 있습니다. 여기

enter image description here

가 출력된다.

enter image description here

+0

감사합니다. 당신은 ctx를 의미 했습니까? OutgoingResponse.Headers? 또한 코드를 어디에 배치할까요? XMLData (문자열 ID) 내의 다음 코드는 작동하지 않습니다. ... {System.ServiceModel.Web.WebOperationContext ctx = System.ServiceModel.Web.WebOperationContext.Current; String request_header_value1 = ctx.IncomingRequest.Headers [ "Incoming_Req_Header_Key1"]. ToString(); ctx.OutgoingResponse.Headers.Add ("Incoming_Req_Header_Key1", request_header_value1); return "귀하가 요청한 제품"+ id; } – kong88

+0

@ kong88 예, 맞습니다. 그것은 OutgoingResponse이고 정상적으로 작동해야합니다. –

+0

@ kong88, 예상대로 작동 중입니다. 귀하의 경우에, 당신은'Incoming_Req_Header_Key1'을 wcf 요청 헤더에 전달하지 않으면 깨질 수 있습니다 (나는 당신이 통과하지 못했다면 null이 될 것이고 응답 헤더에 아무것도 추가되지 않을 것입니다). –