关于c#:如何使用UriTemplate?

How to use UriTemplate?

我的 WCF Web 服务中有以下 OperationContract。

1
2
3
4
5
6
7
[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 调用一个通用方法,这意味着在服务实现代码中,我将在调用的 UriTemplate 的基础上调用存储过程,我知道我可以通过在上面的 url 中添加额外的属性来轻松地做到这一点,我不\\ '不想让用户把它从 url.

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

1
2
3
4
5
6
7
[OperationContract]
[WebGet(UriTemplate ="/publisheddata/{number}/{*publication}")]
Message GetData(String number, String publication);

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

在我的服务实现中,我想检查是否 unpublisheddata 然后 GetUnPublished 如果已发布数据然后 GetPublisheddata

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


首先,-可能-由于您的方法名称,您会得到异常。您不能使用与您相同的方法名称,但可以使用 OperationContract 属性"Name"

1
2
3
4
5
[OperationContract(Name="GetPublished")]
Message GetData(String number, String publication);

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

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

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

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


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

1
2
 [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) 中,我正在执行这样的过程

1
2
3
4
5
6
7
8
if(customerRequest.Id != Guid.Empty)
{
    Update(customerRequest);
}
else
{
   Create(customerRequest);
}

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