Bản đồ lộ trình của bạn có lẽ là một cái gì đó như thế này:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
Nhưng để có nhiều hành động với cùng một phương thức http, bạn cần cung cấp cho webapi nhiều thông tin hơn qua tuyến đường như vậy:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Lưu ý rằng routeTemplate hiện bao gồm một hành động. Nhiều thông tin hơn ở đây: http://www.asp.net/web-api/overview/web-api-routing-and-ilities/routing-in-aspnet-web-api
Cập nhật:
Được rồi, bây giờ tôi nghĩ rằng tôi hiểu những gì bạn đang ở đây là một điều khác:
Có lẽ bạn không cần tham số url hành động và nên mô tả nội dung mà bạn đang theo sau theo cách khác. Vì bạn đang nói rằng các phương thức đang trả về dữ liệu từ cùng một thực thể, sau đó chỉ cần để các tham số thực hiện mô tả cho bạn.
Ví dụ, hai phương thức của bạn có thể được chuyển thành:
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
Loại dữ liệu nào bạn đang truyền trong đối tượng MyVm? Nếu bạn có thể chuyển các biến qua URI, tôi khuyên bạn nên đi theo tuyến đó. Mặt khác, bạn sẽ cần gửi đối tượng trong phần yêu cầu và đó không phải là HTTP của bạn khi thực hiện GET (mặc dù nó hoạt động, chỉ cần sử dụng [FromBody] trước MyVm).
Hy vọng rằng điều này minh họa rằng bạn có thể có nhiều phương thức GET trong một bộ điều khiển duy nhất mà không cần sử dụng tên hành động hoặc thậm chí là thuộc tính [HttpGet].