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); } |
我的用户看不到创建/更新方法