我正在写一个REST API,并有以下问题:
随着资源/消息/,我在我的MessageController以下方法:
[HttpGet]
// retrieves all messages for a user
public HttpResponseMessage GetMessages(Guid RecordId) {}
[HttpGet]
// retrieves only a single messages, specified by guid
public HttpResponseMessage GetMessage(Guid RecordId) {}
在我WebApiConfig.cs我有以下路径:
config.Routes.MapHttpRoute(
name: "MessageRouting",
routeTemplate: "messages/{RecordId}/",
defaults: new { controller = "Message", RecordId= RouteParameter.Optional }
);
这,当然,失败,因为路由不知道该调用哪个方法。 这里的问题是,保持平安,我想避免额外的查询参数,如
GET /messages/?userid=1
我应该相当拉离的accessToken和呼叫的getMessages如下的用户id?
GET /messages
AccessToken=foo
我将使用遇到了同样的问题[HttpPost]和[HttpPut]以及 - 我总有某一托收或单个项目,我想工作,所以对于每个HTTP方法,我将至少有2个方法调用。
我没有移动的getMessages()方法将UserController中的选项,因为在那里我会遇到同样的问题-似乎与网络API,控制器只能有每个HTTP方法确定一个单一的时间 ,这使得它可怕很难与收藏与单品的工作。
我剩下的REST风格,并具有唯一的URL标识资源之间的一个小撕裂,但似乎.NET这里不给我一个选择,我不能指定路由的HTTP方法。 或者,可以吗?