【问题标题】:HttpContext vs. OperationContext in DataService with HTTP headers带有 HTTP 标头的 DataService 中的 HttpContext 与 OperationContext
【发布时间】:2012-12-22 06:07:32
【问题描述】:

我有一个覆盖 OnStartProcessingRequest(ProcessRequestArgs args) 的 WCF DataService (v5.2)。我想在响应中添加一些标头(在这种方法中我认为是正确的地方?)。我第一次尝试这个:

args.OperationContext.ResponseHeaders.Add(...)

那没用。然后我尝试了这个:

OperationContext.Current.OutgoingMessageHeaders.Add(...)

那没用。我尝试在那个傻瓜上添加一个新的 OperationContextScope。它仍然失败。最后我尝试了这个:

HttpContext.Current.Response.AddHeader(...);

该选项有效! (“工作”是指它实际上出现在对客户的响应中。)为什么前两个选项不起作用?

在网上进一步阅读后,我发现

WebOperationContext.Current.OutgoingResponse.Headers.Add(...)

也可以。为什么我们在这个方法中有四个当前上下文?一个人如何知道使用哪一个(在运行时)?哪些在我的[WebGet] 方法中有效?哪些在我的[QueryInterceptor] 方法中有效?保证哪个上下文具有正确的请求标头? (我目前一直在使用 args.OperationContext。)

【问题讨论】:

    标签: c# http-headers wcf-data-services


    【解决方案1】:

    不知道 ProcessRequestArgs.OperationContext.ResponseHeaders,但我想我可以解释为什么 OperationContext.Current.OutgoingMessageHeaders 不起作用:“标头”有 SOAP 标头(可能被非 SOAP 服务忽略),而不是HTTP 标头。在其他两种情况下(HttpContext.Current.Response.AddHeader 和WebOperationContext.Current.OutgoingResponse.Headers)请注意名称中的“Http”和“Web”表示您正在执行特定于HTTP 的操作,即添加HTTP 标头。

    顺便说一句:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2012-04-25
      • 2022-07-06
      相关资源
      最近更新 更多