Wcf POST/PUT restful服务的URI模板

Wcf POST/PUT restful服务的URI模板,wcf,api,c#-4.0,rest,Wcf,Api,C# 4.0,Rest,我将要编写一个restful API,我的需求是调用“Transaction”对象上的方法,我想知道如何使用适当的URI模板调用Post/PUT,这样我就可以创建/更新事务资源,而不必在URI映射中使用“动词” [OperationContract] [WebInvoke(Method = "POST", UriTemplate = "/Transaction/{**What to write here ????**}", RequestFormat = WebMessageFormat.Jso

我将要编写一个restful API,我的需求是调用“Transaction”对象上的方法,我想知道如何使用适当的URI模板调用Post/PUT,这样我就可以创建/更新事务资源,而不必在URI映射中使用“动词”

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Transaction/{**What to write here ????**}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public Transaction AddTransaction(Transaction transaction)
{
    return AddTransactionToRepository(transaction);
}

[OperationContract]
[WebInvoke(Method = "PUT", UriTemplate = "/Transaction/{**What to write here ????**}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction UpdateTransaction(Transaction transaction)
{
    return UpdateTransactionInRepository(transaction);
}

请考虑我要应用URI映射的最佳实践,不要在它中只使用“动词”,而只需要“名词”。还告诉我客户端将如何使用唯一的URI访问Post和Put的这些方法。感谢

PUT用于创建或更新已知资源,例如:PUT/Transactions/1234

这将创建(或更新,如果它已经存在)ID为1234的事务。这意味着您只能在知道资源的URL时使用PUT

POST创建新的子资源,例如:POST/Transactions/

这将创建一个新的事务资源

请注意,我对事务进行了多元化处理,因此它现在表示一个集合


作为一名C#开发者,我不知道映射到WCF有多容易,但这种方法是独立于技术的。

对于
事务
,您必须如下映射URI

按ID获取事务-获取-事务/ID

创建一个新事务-后处理事务

更新事务-PUT-事务/id

删除事务-删除-事务/id

您的URI模板必须更改如下

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Transaction", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public Transaction AddTransaction(Transaction transaction)
{
    //
}

[OperationContract]
[WebInvoke(Method = "PUT", UriTemplate = "/Transaction/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction UpdateTransaction(int id, Transaction transaction)
{
    //
}
客户端将如何使用唯一URI访问Post和Put的这些方法

POST和PUT不需要唯一的URI。这些URI可以是相同的

参考资料:


用于制作正确的URL和api设计原则。。。我发现这本电子书(不是我的!)是必读的:

感谢Mark的澄清,我对客户端如何以更可读的方式进行通信感到有点困惑,但我想客户端必须调用同一url,但在调用Api方法时指定不同的操作,即post、put、delete。@Mark,为什么这两种方法都返回事务对象?我知道POST方法可能需要这个Id,因为Id可能是数据库中自动生成的数字,但是为什么要使用PUT方法呢?谢谢。第二个示例将编译,但无法激活,因为UriTemplate路径段的变量必须为“string”,链接似乎已失效。