WCF добавить параметр запроса не ожидается в подписи
У меня есть контракт, используемый в 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(...)
Любая идея, как я могу улучшить это?
Примечание. Я не могу вносить существенные изменения в контракт, поскольку это в основном устаревший код.
1 ответ
Вы можете установить пакет nuget WCF Web Extensions ( ссылка 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.