我正在尝试使用Web Api最佳实践创建REST服务,我遇到了一个我不知道如何处理的情况。
想象一下,我有群组,每个群组内都有用户。
这就是我的GroupController的样子:
[RoutePrefix("api/v1/groups")]
public class GroupsController : ApiController
{
[HttpGet]
[Route("{id:int}")]
public IHttpActionResult Get(int id)
{
return Ok();
}
// I also want to add endpoint which fetches all the users inside of group and I'd like to do it like this:
[HttpGet]
[Route("{id:int}/users")]
public IHttpActionResult Get(int id)
{
return Ok();
}
}
正如您所看到的,我的第二个方法将无法编译,因为我们在同一个类中不能有两个具有相同签名的方法。
我的路线模板看起来像是标准模板:
config.Routes.MapHttpRoute(
name: "DefaultRouting",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我知道我可以添加一个映射动作方法名称的路线,但我想知道是否有更好的方法来实现我的目标。我想坚持编写RESTful服务的最佳原则。据我所知,其中一个建议是避免使用自定义操作名称,因为这对于WCF服务来说更常见。
答案 0 :(得分:3)
不要混合If cell.Interior.ColorIndex = 6 Then
If cell.Value = "" Then
cell.Value = ActiveCell.Value
Exit For
End If
End If
样式路由配置和基于属性的路由。使用其中一个更简单(我更喜欢基于属性,因为它是明确的,并允许更清晰的类方法名称。)
您似乎也没有调用在配置上启用基于属性的路由所需的方法 - MapHttpRoute()
。
最后,我按照以下方式重命名您的方法,以确保方法签名中没有冲突:config.MapHttpAttributeRoutes()
和GetGroups(int id)