wcf post 方法如何从传入请求中获取标头?
Posted
技术标签:
【中文标题】wcf post 方法如何从传入请求中获取标头?【英文标题】:How does wcf post method get header from incoming request? 【发布时间】:2020-10-02 03:17:49 【问题描述】:我有一个 wcf post 方法,这个方法需要客户端发送的TokenId
。
我正在使用下面的代码来获取传入标头的tokeid。
IncomingWebRequestContext woc = WebOperationContext.Current.IncomingRequest;
string tokenId = (woc.Headers["TokenId"] == null ? string.Empty : woc.Headers["TokenId"].ToString());
对于 wcf get 方法,它可以完美运行,并且能够获取令牌 ID,但是对于 wcf post 方法,它会生成以下错误消息。
System.ServiceModel.Channels.MessageProperties get_Properties() ?Message?消息对象已被释放
任何人都知道如何解决问题并确保 wcf post 方法能够从传入请求中获取标头?谢谢
【问题讨论】:
【参考方案1】:我看到你的错误原因是“消息对象已被释放”,建议你使用IDispatchMessageInspector截取消息并获取请求头。
public class ServerMessageLogger : IDispatchMessageInspector
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
IncomingWebRequestContext woc = WebOperationContext.Current.IncomingRequest;
string header = woc.Headers["Host"];
return null;
public void BeforeSendReply(ref Message reply, object correlationState)
我们在收到请求后截取它的消息,避免消息被销毁。我分别用get方法和post方法测试,都可以成功获取到请求头。
有关IDispatchMessageInspector的更多信息,请参考以下链接:
https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.dispatcher.idispatchmessageinspector?view=netframework-4.8
【讨论】:
嗨,谢谢丁丁,但我可以知道如何调用这个方法吗?我怎样才能得到这三个参数?参考消息请求,IClientChannel通道,InstanceContext instanceContext 这个方法不需要调用,每次收到消息都会自己执行。 嗨,先生,谢谢,但是当我调试我的应用程序时它永远不会自动执行。你的意思是我添加 IDispatchMessageInspector 接口并在我当前的 svc 文件中实现方法。它会自动执行吗? 您还需要将其添加到服务中。详情请参考此链接:***.com/questions/62325865/…以上是关于wcf post 方法如何从传入请求中获取标头?的主要内容,如果未能解决你的问题,请参考以下文章
寻找一种从传入的 http 请求中获取 HTTP Digest Authentication 标头的方法
如何从使用 axios 发送的 POST 请求中获取 Content-Length 标头?
wcf在post请求时,关于string类型参数传入中文的处理