Asp.net web api 基于Asp.NET WebApi约定的Url/路由查询方法

Asp.net web api 基于Asp.NET WebApi约定的Url/路由查询方法,asp.net-web-api,Asp.net Web Api,对于需要返回资源“子属性”的基于asp.net webapi约定的rest服务,我不确定“最佳实践”的前进方向 例如: 但是如果我想返回一个给定的用户角色集合,我想我想要一个url/api/v1/users/23/Roles 如果你使用我的API,你会认为这是可以接受的吗? 如果可以接受,我的routeTemplate和方法签名会是什么样子(如果这是显而易见的,那么很抱歉,我今天真的把自己弄糊涂了) 我能找到的所有web api示例都太简单了,只使用了DELETE、PUT、POST和two-GE

对于需要返回资源“子属性”的基于asp.net webapi约定的rest服务,我不确定“最佳实践”的前进方向

例如:

但是如果我想返回一个给定的用户角色集合,我想我想要一个url
/api/v1/users/23/Roles

如果你使用我的API,你会认为这是可以接受的吗? 如果可以接受,我的routeTemplate和方法签名会是什么样子(如果这是显而易见的,那么很抱歉,我今天真的把自己弄糊涂了)

我能找到的所有web api示例都太简单了,只使用了DELETE、PUT、POST和two-GET,似乎没有一个包含子属性(如上所述)或部分响应之类的内容
/api/v1/Users/23?fields=id,name
——如果有人知道一个很好的例子,那就太棒了

非常感谢

角色

角色看起来是一个非常明智的子资源

假设您希望使用http谓词从用户中列出和删除角色。。。然后您可以使用两个控制器,一个用于用户,另一个用于角色。然后,您的路线将如下所示:

config.Routes.MapHttpRoute(
名称:“用户API”,
routeTemplate:“api/v1/Users/{userId}/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/v1/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
然后,您的角色控制器将具有如下方法:

公共类角色控制器:ApiController
{
//获取api/v1/users/1/角色
公共IEnumerable Get(int userId)
{
//
}
//获取api/v1/users/1/roles/1
公共IEnumerable Get(int userId,int id)
{
//
}
}
作为用户部分响应的角色

对于请求使用的格式和标准:

apigee在他们的网站上做了一个免费的电子书,在那里他们对现有的API提出了设计建议和意见

他们描述了LinkedIn、Facebook和谷歌的部分回复示例。这在他们的一个博客和书中都有介绍

如何使用WebApi ASP.NET


假设使用JSON作为内容类型,那么之前也提出过类似的问题,简而言之,您需要将“.Fields=”或类似内容的查询参数传递到自定义的
ContractResolver

中。我想你刚刚帮助我实现了路线匹配的突破:)
UsersController

public User Get(int id) { ... } //returns named user via /api/v1/Users/23