在WCF MessageEncoder中获取HTTP标头

Mim*_*ilt 6 .net c# rest wcf http

我正在为我的自主WCF REST应用程序编写GZIP压缩.我有一个.NET'MessageEncoder'类的自定义实现和'WebContentTypeMapper'类的自定义实现.

如何在"ReadMessage"函数和"GetMessageFormatForContentType"函数中检索http标头?在解压缩输入之前,我想检查"Content-Encoding"标头的传入请求.

谢谢.

Cyb*_*axs 1

您可以尝试使用 WebOperationContext.Current 或 OperationContext.Current (取决于您的绑定)。但不幸的是,我认为您无法在 MessageEncoder 实现本身中执行此操作,因为在该过程中为时已晚,因为当要求 MessageEncoder 写入消息内容时,消息帧(在本例中为 HTTP 标头)已经被写入。因此,您还需要 IOperationBehavior 形式的附加行为,应用于相应设置标头的操作。在我的一个个人实现中,我通过使用自定义消息检查器在 OperationContext 中添加 GzipExtension 解决了这个问题。正如Alex所说,IIS已经有一个称为动态压缩的功能,可以压缩任何配置的内容类型。