asp.net - WCF WebInvoke属性可以采用GET作为方法吗

标签 asp.net wcf web-services attributes webinvoke

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

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

最佳答案

WebInvoke 是包括 GET 在内的任何 HTTP 动词的通用属性。如果将其与 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 方法已正常处理。

关于asp.net - WCF WebInvoke属性可以采用GET作为方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061251/

相关文章:

c# - Asp.net cookieless sessionId url位置

ASP.NET Core RC2 项目 - 服务文件夹的用途是什么?

asp.net - 为什么我无法将 JSON 对象传递到 WCF Web 服务?

.net - 是否可以使用 WCF 将 SoapException 转换为 FaultException?

visual-studio - 如何在附加到 Visual Studio 中的进程时运行测试

c# - 创建自定义 TreeView/TreeNode

c# - WCF、Unity、EntLib5、Linq-to-SQL 与 TDD 和 PI 的示例

c# - (413) WCF 请求实体太大错误

c# - 底层连接已关闭 : An unexpected error occurred on a receive

.net - 弃用 WCF 服务的最佳实践