我們這裏還有一個RESTful的WebAPI服務,我一直在想,怎樣做來構建我的代碼和路由,以應對以下幾點:REST 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);
發送時http://myapi/customer/1/files
它解決的FilesController
:
[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
作爲實體和1
通過爲實體ID ,但它不覺得是最好的解決方案,有沒有更好的方法來做到這一點,這是錯的?
我認爲你的意思相反,HTTP:// myapi /文件/客戶=所有與文件= 1,對不對? –
@PedroWerneck不,我寫的是正確的:) - 在客戶1 –
之前獲取所有文件,然後在您的短語出錯之前獲取所有文件,因爲您的GET關注的是客戶的ID。無論如何,你的問題對我來說真的不清楚。 –