【问题标题】:Can the WCF WebInvoke attribute take GET as a methodWCF WebInvoke 属性是否可以将 GET 作为方法
【发布时间】:2012-04-21 02:53:08
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    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 方法已正常处理。

    【讨论】:

    • 完美。非常感谢,尤其是解释代码。因此,换句话说,当使用 WebInvoke 和 WebGet 时,WebInvoke 和 WebGet 会进入一个调度例程,在该例程中检查属性(这里的属性是 'get' 或 'post'),并且该检查的结果对于进一步解释是决定性的命令”。 GetWebMethod 是一种框架内部的过滤器。我们在哪里可以看到 GetWebMethod?我想通过研究 serviceModel 类层次结构。
    • GetWebMethod 是 WCF 中的内部方法 - 您可以使用 Reflector 等工具找到它。
    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多