This question 已经问了我在问什么,但我想对答案进行一些澄清。

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

但是如果 Method 参数设置为 "GET" ,它实际上在功能上是等效的,还是有其他区别?

最佳答案

它们只是标记属性,最终在功能上 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";
}

10-06 13:27