使用WCF IDispatchMessageInspector.AfterReceiveRequest更改请求的内容类型

时间:2013-04-28 15:36:13

标签: wcf

我有一个WCF Web服务,其中客户端使用不正确的内容类型。这反过来会导致错误。

我希望能够拦截服务器端的传入请求并修复标头,以便处理请求。我试图通过实现IDispatchMessageInspector并使AfterReceiveRequest修改内容类型来实现,如下所示:

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
    HttpRequestMessageProperty req = (HttpRequestMessageProperty)request.Properties["httpRequest"];
    req.Headers.Set(HttpRequestHeader.ContentType, "correct content type");
    return null;
}

不幸的是,这似乎没有办法。修改后的内容类型未被提取。

2 个答案:

答案 0 :(得分:0)

据我了解,您必须创建邮件的副本,对其进行处理,然后将ref request参数设置为新邮件。我知道这有点反直觉,但你有。

要复制邮件,请使用CreateBufferedCopy方法。

答案 1 :(得分:0)

可能你会尝试这样的事情:

WebOperationContext.Current.OutgoingResponse.ContentType = "correct content type"; 

(来自Is it possible to set ContentType for a WCF WebGet method?

另外,这篇文章(Copy HTTP request / response headers from a call to a HttpWebRequest?) 谈谈对某些标题的限制(我没有更深入地研究它):

  

但是,要了解某些标题是受限制,而不是   自由修改。这些是:   
。 。 。   
  内容 - 长度