Đây chắc chắn là một sự thay đổi từ Beta sang RC. Trong ví dụ được cung cấp trong câu hỏi, bây giờ bạn cần trang trí hành động của mình bằng [HttpGet] hoặc [AcceptVerbs ("GET")].
Điều này gây ra vấn đề nếu bạn muốn kết hợp các hành động dựa trên động từ (tức là "GetSomething", "PostSomething") với các hành động không dựa trên động từ. Nếu bạn cố gắng sử dụng các thuộc tính trên, nó sẽ gây ra xung đột với bất kỳ hành động dựa trên động từ nào trong bộ điều khiển của bạn. Một cách để có được sự cố đó là xác định các tuyến đường riêng biệt cho mỗi động từ và đặt hành động mặc định thành tên của động từ. Phương pháp này có thể được sử dụng để xác định tài nguyên con trong API của bạn. Ví dụ: mã sau hỗ trợ: "/ resource / id / children" trong đó id và con là tùy chọn.
context.Routes.MapHttpRoute(
name: "Api_Get",
routeTemplate: "{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional, action = "Get" },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
context.Routes.MapHttpRoute(
name: "Api_Post",
routeTemplate: "{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional, action = "Post" },
constraints: new { httpMethod = new HttpMethodConstraint("POST") }
);
Hy vọng rằng các phiên bản tương lai của API Web sẽ hỗ trợ tốt hơn cho trường hợp này. Hiện có một sự cố được ghi lại trên dự án codeplex aspnetwebstack, http://aspnetwebstack.codeplex.com/workitem/184 . Nếu đây là điều bạn muốn xem, vui lòng bỏ phiếu cho vấn đề.