如何使用UriTemplate?

时间:2013-12-30 04:57:52

标签: c# wcf web-services

我的WCF Web服务中有OperationContract。

[OperationContract]
[WebGet(UriTemplate = "/publisheddata/{number}/{*publication}")]
Message GetPublished(String number, String publication);

[OperationContract]
[WebGet(UriTemplate = "/unpublisheddata/{number}/{*publication}")]
Message GetUnPublished(String number, String publication);

我想调用一个常见的方法,以上两个OperationContract,意味着在Service实现代码中我会调用基于UriTemplate调用的存储过程,我知道我可以通过在上面的url中添加额外的属性来轻松完成,我不知道我想要求用户将其从网址中删除。

这里我想在调用UriTemplate的基础上编写条件,所以上面的代码变成如下:

[OperationContract]
[WebGet(UriTemplate = "/publisheddata/{number}/{*publication}")]
Message GetData(String number, String publication);

[OperationContract]
[WebGet(UriTemplate = "/unpublisheddata/{number}/{*publication}")]
Message GetData(String number, String publication);

在我的服务实现中,我想检查如果未发布数据,那么GetUnPublished else如果发布了数据,那么GetPublisheddata

是否有可能或建议更好的方法来实施它?

2 个答案:

答案 0 :(得分:1)

首先, - 可能 - 因为您的方法名称,您将获得异常。您不能使用与您相同的方法名称,但可以使用OperationContract属性“Name”

[OperationContract(Name="GetPublished")]
Message GetData(String number, String publication);

[OperationContract(Name="GetUnPublished")]
Message GetData(String number, String publication);

如果您更喜欢单一方法,可以像这样修改方法

[OperationContract]
[WebGet(UriTemplate = "/{publicationType}/{number}/{*publication}")]
Message GetData(string publicationType, string number, string publication);

并在您的方法中检查“publicationType”参数并执行逻辑

答案 1 :(得分:0)

如果我真的明白,你只想提供访问单一方法。我在我的项目中使用了这样的结构

 [WebInvoke(Method="POST", UriTemplate ="/customers", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json), Description("Save a customer information")]
 OperationResult CustomerSave(Request<Customer> customerRequest);

我还有2种不同的方法 - 不在WCF接口/合同中显示 - 命名为“创建”和“更新”

在我的wcf方法(CustomerSave)中,我正在做这样的过程

if(customerRequest.Id != Guid.Empty)
{
    Update(customerRequest);
}
else
{
   Create(customerRequest);
}

我的用户无法看到创建/更新方法