我们这里有一个 RESTful WebAPI 服务,我一直想知道如何构建我的代码和路由以应对以下问题:
http://myapi/customer/1/files
和
http://myapi/customer/1/files/3
所以我基本上有一个管理客户信息的客户控制器和一个管理文件信息的文件控制器,如果我想要客户 1 的所有文件,我可能会做第一个请求。
我真的不想在客户的上下文中管理它,所以当我对文件的 GET 专注于文件的 ID 时,我将不得不重载它并执行
http://myapi/files/?customer=1&files=all
它似乎比第一个解决方案不太干净?
目前我有以下内容:
config.Routes.MapHttpRoute(name: SubController, routeTemplate: "{entity}/{entityid}/{controller}/", defaults: null);
config.Routes.MapHttpRoute(name: SubControllerAndId, routeTemplate: "{entity}/{entityid}/{controller}/{id}", defaults: null);
这解决了FilesController
发送时http://myapi/customer/1/files
:
[HttpGet]
public HttpResponseMessage Get(string entity, string entityid, int id)
{
var item = "Hello " + entity + " " + entityid + " " + id;
return Request.CreateResponse(HttpStatusCode.OK, item);
}
[HttpGet]
public HttpResponseMessage Get(string entity, string entityid)
{
var item = "Hello " + entity + " " + entityid;
return Request.CreateResponse(HttpStatusCode.OK, item);
}
customer
这有效并作为实体和实体ID传递1
,但感觉不是最好的解决方案,有没有更好的方法来做到这一点,这是错误的吗?