【问题标题】:WCF UriTemplate for RESTful resource用于 RESTful 资源的 WCF UriTemplate
【发布时间】:2010-12-28 22:22:34
【问题描述】:

As mentioned in 2009,WCF 无法区分以下 url 以返回用户列表和特定用户:

/users 
/users/{id}

WCF4 还是这样吗?

【问题讨论】:

    标签: .net wcf c#-4.0


    【解决方案1】:

    大卫的回答很好,但我会使用:

    [OperationContract(Name="Op1")]
    [WebGet(UriTemplate = "DoWork/")]
    int[] DoWork();
    
    [OperationContract(Name = "Op2")]
    [WebGet(UriTemplate = "DoWork/{id}")]
    int[] DoWork(string id);
    

    【讨论】:

    • +1 好点,WebGet 可能比 WebInvoke 更好地用于 REST 服务 GET。我不确定 WebGet/WebInvoke 的理想推荐模式是什么
    • 我很确定这两种模式没有什么不同,只是 WebGet 上没有 Method 定义,因为它是隐式的。似乎 WebGet 的存在仅仅是因为绝大多数 Web 服务是数据提供者而不是数据接收者。除了它的名字和它隐式实现 GET 的事实之外,两者看起来是相同的。
    • 乔纳森,没有。据我所知,操作合同名称未在 URL 中公开。事实上,我什至从未在 OperationContract 属性中使用过 Name 参数。我通常只是放 [OperationContract]。唯一对 URL 重要的部分是服务端点 URL + UriTemplate 字符串模式。但是,由于我从不使用 Name 参数,所以也许我弄错了。也许如果它在那里,它会在 URL 中使用。不完全确定,但我不这么认为。
    【解决方案2】:

    你现在可以这样做了:

    [OperationContract(Name="Op1")]
    [WebInvoke(Method= "GET", UriTemplate = "DoWork/")]
    int[] DoWork();
    
    [OperationContract(Name = "Op2")]
    [WebInvoke(Method = "GET", UriTemplate = "DoWork/{id}")]
    int[] DoWork(string id);
    

    重要的是 OperationContract 必须具有 Name= 属性,每个操作具有不同的名称。

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 1970-01-01
      • 2017-12-17
      • 2013-04-16
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多