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