1

我有一份在 WCF POST 中使用的合同。在通话期间,我需要添加一个无法在签名中添加的额外参数,因为我遇到了消歧问题。

合同:

    [OperationContract]
    [WebInvoke(UriTemplate = "", Method = "POST")]
    Y Create(Stream x);

    [OperationContract]
    [WebInvoke(UriTemplate = "?cmd=put", Method = "POST")]
    Y Create2(Stream x);

我想要做的是改变WebOperationContext.Current.OutgoingRequest添加这个参数,bool allowOverwrite.

使其工作的唯一方法是添加标题,这不是一个愉快的选择。WebOperationContext.Current.OutgoingRequest.Headers.Add(...)

知道如何改进吗?

注意:我不能对合同进行重大更改,因为它主要是遗留代码。

4

1 回答 1

0

您可以安装WCF Web Extensions nuget 包(nuget 链接)。然后,即使在 WebOperationContext 范围之外,您也可以添加可选的查询参数,如下所示:

using (var factory = new WebChannelFactory<IQueryParametersTestService>(new WebHttpBinding()))
{
     factory.Endpoint.Address = new EndpointAddress(ServiceUri);
     factory.Endpoint.EndpointBehaviors.Add(new QueryParametersServiceBehavior());
     using (var client = factory.CreateWebChannel())
     {
           client.AddQueryParameter("format", "xml");
           client.AddQueryParameter("version", "2");
           var result = client.Channel.GetReport();
     }
}

在服务器端,您可以使用 WebOperationContext 检索可选的查询参数。

于 2018-11-14T20:56:46.923 回答