WCF WebInvoke属性可以将GET作为方法

时间:2012-04-08 07:44:04

标签: asp.net wcf web-services attributes webinvoke

WebInvoke属性是否可以将GET作为方法?我在Microsoft文档中看不到任何关于此的概念。我已经看到它在一些论坛的例子中使用过。

原则上,不应该这样,当使用webInvoke时,您可以发布,放置和删除。相反,当使用WebGet时,您只能通过HTTP使用GET动词,这意味着您不能发布,删除和放置。现在Get-operations不应该修改数据,它们应该根据W3org是幂等的,因此不是WebInvoke属性中的一个选项。有人可以在WebInvoke属性中指出GET动词的角色或存在,特别是在REST编程的上下文中。

1 个答案:

答案 0 :(得分:4)

WebInvoke是任何HTTP动词(包括GET)的一般属性。如果将它与GET一起使用,则必须遵循所有GET的限制 - 操作参数必须是映射到URI路径参数的简单类型。

WebGet仅适用于GET动词和恕我直言,它主要是为了显示GET和其他动词之间的区别(GET应该是幂等的,GET没有身体等等)

使用这些属性的.NET中最重要的方法是内部GetWebMethod

internal static string GetWebMethod(OperationDescription od)
{
    WebGetAttribute wga = od.Behaviors.Find<WebGetAttribute>();
    WebInvokeAttribute wia = od.Behaviors.Find<WebInvokeAttribute>();
    EnsureOk(wga, wia, od);
    if (wga != null)
    {
        return "GET";
    }
    if (wia == null)
    {
        return "POST";
    }
    return (wia.Method ?? "POST");
}

正如您所见,WebInvoke的GET方法正常处理。