如何干净地为MS Web Api构建REST API端点?

Arm*_*est 2 c# rest asp.net-mvc http-get asp.net-web-api

我有一个名为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
Run Code Online (Sandbox Code Playgroud)

这是实现这个的最佳方式吗?

我正计划制作我的默认控制器 pim/{appId}/{controller}/{id}

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

car*_*ira 5

您可以按照描述获得路线并使用它

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

在您的控制器中,您将拥有以下方法:

public class ProductsController : ApiController
{
    public Product Get(int appId, int id) { ... }
    public List<Product> Get(int appId) { ... }
}
Run Code Online (Sandbox Code Playgroud)

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