C# WCF REST Web服务和HTTP头
我创建了一个RESTWeb服务,它返回一个以xml格式传递的简单id 但是,作为返回的xml的一部分,我希望包含自定义头。我希望能够读取请求头中的数据,并在响应中返回其中的一些数据 例如,如果请求包括Header1和Header2,我希望返回Header1和Header2作为响应的一部分,同时返回一个新的头Header3 我正在努力找出在哪里以及如何做到这一点,所以任何帮助都将不胜感激 我的代码: RestServiceImpl.svc.cs: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 {
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时,我应该作为值参数传入什么?