C# 如何为MS Web API干净地构造REST API端点?

C# 如何为MS Web API干净地构造REST API端点?,c#,asp.net-mvc,rest,asp.net-web-api,http-get,C#,Asp.net Mvc,Rest,Asp.net Web Api,Http Get,我有一个名为PIM(产品信息管理器)的数据模型,它要求我为每个请求传递一个公司AppId。因此,如果我想获得所有产品,我会传递一个公司AppId和资源id 我正试图以一种干净的方式构建我的REST端点,我已经想到了以下几点: http://api.example.com/pim/44/products/ -- Gets all products in company 44 http://api.example.com/pim/44/products/123 -- Get product 1

我有一个名为PIM(产品信息管理器)的数据模型,它要求我为每个请求传递一个公司AppId。因此,如果我想获得所有产品,我会传递一个公司AppId和资源id

我正试图以一种干净的方式构建我的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}令牌?

您可以拥有所描述的路由,并使用它

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) { ... }
}
公共类产品控制器:ApiController
{
公共产品Get(int-appId,int-id){…}
公共列表获取(int-appId){…}
}

由于参数名(appId,id)与路由参数匹配,因此ASP.NET Web API应在调用操作时将URL值绑定到参数。

!简单而中肯!约定优先于配置。我喜欢。