2

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

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

4

1 回答 1

4

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

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

.NET 中使用这些属性最重要的方法是 internal 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 方法。

于 2012-04-08T08:01:22.083 回答