Включить несколько методов HTTP для одной операции? - PullRequest
9 голосов
/ 17 февраля 2009

У меня есть рабочий контракт (ниже), для которого я хочу разрешить запросы GET и POST. Как я могу сказать WCF принять оба типа запросов для одного OperationContract?

[OperationContract,
WebInvoke(Method="POST",
    BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Xml,
    ResponseFormat = WebMessageFormat.Xml,
    UriTemplate = "query")]
XElement Query(string qry);

[OperationContract,
WebInvoke(Method="GET",
    BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Xml,
    ResponseFormat = WebMessageFormat.Xml,
    UriTemplate = "query?query={qry}")]
XElement Query(string qry);

Ответы [ 6 ]

18 голосов
/ 09 мая 2012

Если кто-то ищет другое решение,

[OperationContract]
[WebInvoke(Method="*")]
public <> DoWork()
{
     var method = WebOperationContext.Current.IncomingRequest.Method;
     if (method == "POST") return DoPost();
     else if (method == "GET") return DoGet();
     throw new ArgumentException("Method is not supported.");
}
5 голосов
/ 17 февраля 2009

Этот пост на форумах MSDN Карлоса Фигейры имеет решение. Я пойду с этим сейчас, но если у кого-то есть более чистые решения, дайте мне знать.

[OperationContract,
WebInvoke(Method="POST",
    BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Xml,
    ResponseFormat = WebMessageFormat.Xml,
    UriTemplate = "query")]
XElement Query_Post(string qry);

[OperationContract,
WebInvoke(Method="GET",
    BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Xml,
    ResponseFormat = WebMessageFormat.Xml,
    UriTemplate = "query?query={qry}")]
XElement Query_Get(string qry);
1 голос
/ 17 февраля 2009

Для проблемы, описанной выше, изменение WebInvoke на WebGet в случае API Query_Get решит проблему.

1 голос
/ 17 февраля 2009

Возможно, вы захотите взглянуть на WebGetAttribute, я сам не пробовал, но вы можете применить его к тому же методу вместе с WebInvokeAttribute.

Информация о MSDN и Джефф Барнс .

0 голосов
/ 17 февраля 2009

GET и POST подразумевают разные действия.

Разве это не смущает клиентов и неправильно с точки зрения REST?

0 голосов
/ 17 февраля 2009

Не использовать WebInvoke поможет.

Возможно, это не тот ответ, который вы ищете.

...