2012-05-11 22 views
5

Hãy tưởng tượng một hệ thống với Người dùng, Nhóm với ApiControllers tương ứng. Sau đó tưởng tượng mô hình truy cập sau:ASP.NET Web API có thể xử lý các tài nguyên phụ với các bộ điều khiển khác nhau

/api/users     
/api/users/1 
/api/users?groupId=1 <- #1 returns users belonging to group id 1 via Get(int? groupId) 

/api/groups/ 
/api/groups/1 
/api/groups/1/users  <- #2 sub resource, returns users belonging to group id 1 

Có thể ủy thác trách nhiệm của # 2 đến # 1 của Get(int? groupId) phương pháp? Tôi muốn giữ trách nhiệm xử lý các tài nguyên phụ với Bộ điều khiển gốc của chúng. Nói cách khác, Nếu một tài nguyên phụ cũng tồn tại dưới dạng tài nguyên thì việc xử lý tài nguyên phụ phải là? được ủy quyền cho bộ điều khiển tài nguyên chính ...

P.S. Bây giờ, tôi không chắc liệu cách tiếp cận trên có "cosher" với kiểu RESTfull hay không, đó là toàn bộ cuộc thảo luận khác ...

Trả lời

6

WEB Api Beta không hỗ trợ thuộc tính mức phương thức để định tuyến. Họ nói, đang nghĩ đến việc cải thiện câu chuyện định tuyến cho bản phát hành tiếp theo.

Hiện tại, cách duy nhất (như tôi biết) là ánh xạ rõ ràng các tuyến đường đó. Trong trường hợp của bạn:

// for your rest style api 
routes.MapHttpRoute(
    name: "UserGroups", 
    routeTemplate: "api/groups/{groupID}/users", 
    defaults: new { controller = "Users"}, 
    constraints: new { groupID = @"\d+" } 
); 

và cho kiểu RPC URI, tuyến đường mặc định sẽ hoạt động như trong nháy mắt.

routes.MapHttpRoute(
      name: "ApiDefault", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { controller = "Users", id = RouteParameter.Optional } 
     ); 

Và bạn cũng có thể ghi đè lớp DefaultHttpControllerFactory để tạo theo cách thức của bộ điều khiển.

Hy vọng trợ giúp này.

Các vấn đề liên quan