4

This question already asks what I'm asking, but I want some clarification on the answer.

The answer states that WebGet and WebInvoke are similar, and that the primary difference is the Method parameter.

But if the Method parameter is set to "GET", is it actually functionally equivalent, or are there other differences?

4

2 回答 2

2

它们只是标记属性,最终在功能上是 100% 等效的。唯一解释这些属性的是WebHttpBehavior::GetWebMethod方法,它的功能很简单:

internal static string GetWebMethod(OperationDescription od)
{
    WebGetAttribute webGetAttribute = od.Behaviors.Find<WebGetAttribute>();
    WebInvokeAttribute webInvokeAttribute = od.Behaviors.Find<WebInvokeAttribute>();
    WebHttpBehavior.EnsureOk(webGetAttribute, webInvokeAttribute, od);
    if (webGetAttribute != null)
    {
        return "GET";
    }
    if (webInvokeAttribute == null)
    {
        return "POST";
    }
    return webInvokeAttribute.Method ?? "POST";
}
于 2014-12-31T17:55:50.053 回答
0

它不是。

我只是花了几个小时尝试使用基于示例的 MessageFormatter 将 WCF DataContractJsonSerializer 替换为 Newtonsoft JsonSerializer

发现(艰难的方式)使用WebGetWebInvoke(Method="GET").

随着WebInvoke请求通过 WCF 堆栈中的不同管道,尝试反序列化预期的消息(方法IDispatchMessageFormatter.DeserializeRequest()被调用),而WebGet.

经验教训:WebGet用于GET操作

于 2017-03-29T16:09:11.977 回答