0

我有一个 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;
}

不幸的是,这似乎不起作用。修改后的内容类型不会被拾取。

4

2 回答 2

0

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

要复制消息,请使用它的CreateBufferedCopy方法。

于 2013-04-28T16:17:53.150 回答
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?)讨论了对某些标头的限制(我没有更深入地研究它):

但是,请理解某些标头是受限制的,不能随意修改。这些是:
。. .
内容长度

于 2013-04-29T04:06:55.813 回答