WebGet在功能上等同于WebInvoke(Method =“GET”)吗?

时间:2014-12-31 16:17:01

标签: c# .net wcf webinvoke webget

This问题已经问到我在问什么,但我想对答案做一些澄清。

答案指出WebGetWebInvoke相似,主要区别在于Method参数。

但是如果Method参数设置为"GET",它实际上是功能相同的,还是存在其他差异?

2 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分:0)

不是。

我花了几个小时尝试使用基于this的MessageFormatter替换WCF DataContractJsonSerializer和Newtonsoft JsonSerializer  this个样本

发现(困难的方法)使用WebGetWebInvoke(Method="GET")存在差异。

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

吸取的教训:使用WebGet进行GET操作