我有一个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;
}
不幸的是,这似乎没有办法。修改后的内容类型未被提取。
答案 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?) 谈谈对某些标题的限制(我没有更深入地研究它):
但是,要了解某些标题是受限制,而不是 自由修改。这些是:
。 。 。
内容 - 长度强>