WCF REST服务更新头

WCF REST服务更新头,wcf,rest,Wcf,Rest,使用RequestInterceptor可以从请求中提取HTTP头并对其进行一些处理。还可以更新响应。但是,是否有一种方法可以更新和/或在请求本身中插入HTTP头,以便后续处理器(例如,拦截器、授权管理器)?WCF有许多扩展点来执行类似操作。您可能想要的是实现IDispatchMessageInspector的自定义行为 创建一个如下所示的类: public class MyCustomBehavior : IDispatchMessageInspector, IEndpointBehavior

使用RequestInterceptor可以从请求中提取HTTP头并对其进行一些处理。还可以更新响应。但是,是否有一种方法可以更新和/或在请求本身中插入HTTP头,以便后续处理器(例如,拦截器、授权管理器)?

WCF有许多扩展点来执行类似操作。您可能想要的是实现
IDispatchMessageInspector
的自定义行为

创建一个如下所示的类:

public class MyCustomBehavior : IDispatchMessageInspector, IEndpointBehavior
{
    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        //here you can work with request.Headers.
        return null;
    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {
        endpointDispatcher.DispatchRuntime.MessageInspectors.Add(this);
    }

    //there are a bunch of other methods needed
    //but you can leave their implementations empty.
    //...
}
然后,您可以在打开服务之前以编程方式将自定义行为添加到服务端点:

host.Description.Endpoints[0].Behaviors.Add(new WcfService2.MyCustomBehavior());

Paolo Pialorsi有一个处理编写消息检查器的工具。

你看过新的HTTP堆栈吗?它有一个管道模型,可以让你做各种类似的事情。

我还不能使用它,因为它在预览中。我正在使用旧的REST初学者工具包。请求头是只读的。公共密封类HttpRequestMessageProperty{…public WebHeaderCollection Headers{get;}…}@amit_g REST初学者工具包上的许可证基本上阻止您在MS发布真实版本后使用它。对于服务器端的东西,实际版本在.Net 4中,因此许可证不再有效。消息类中的头是只读的。public abstract MessageHeaders Headers{get;}。是的,
Headers
仅为get,但您仍然可以调用
Headers.Add(…)
来修改集合。