2013-05-03 29 views
2

我有一个名为PIM(产品信息管理器)的数据模型,要求我为每个请求传递一个公司AppId。因此,如果我想获得所有产品,我会传递公司AppId和资源ID。如何可以干净地构建MS Web Api的REST API端点?

我想我的结构REST端点干净利索,我想出了这一点:

http://api.example.com/pim/44/products/ -- Gets all products in company 44 
http://api.example.com/pim/44/products/123 -- Get product 123 in company 123 

这是实现这一目标的最佳方式是什么?

我打算让我的默认控制器pim/{appId}/{controller}/{id}

我会遇到问题,我的MVC的路线,如果我这样做呢? 如何在我的GET方法中访问{appId}令牌?

回答

5

你可以像你描述有路线,并用它

routes.MapHttpRoute(
    name: "Default", 
    routeTemplate: "pim/{appId}/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

而在你的控制你有以下几种方法:

public class ProductsController : ApiController 
{ 
    public Product Get(int appId, int id) { ... } 
    public List<Product> Get(int appId) { ... } 
} 

由于参数名称(APPID,ID )匹配路由参数时,ASP.NET Web API应在调用操作时将URL值绑定到参数。

+0

太棒了!简单而重要!约定超过配置。爱它。 – Armstrongest 2013-05-03 05:15:21