แผนที่เส้นทางของคุณน่าจะเป็นแบบนี้:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
แต่เพื่อให้มีการดำเนินการหลายอย่างด้วยวิธี http เดียวกันคุณจำเป็นต้องให้ข้อมูลเพิ่มเติมกับ webapi ผ่านเส้นทางดังนี้:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
ขอให้สังเกตว่าตอนนี้เส้นทางเทมเพลตมีการดำเนินการอยู่ ข้อมูลเพิ่มเติมมากมายที่นี่: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
ปรับปรุง:
เอาล่ะตอนนี้ฉันคิดว่าฉันเข้าใจสิ่งที่คุณหลังจากที่นี่เป็นอีกหนึ่งใช้เวลานี้:
บางทีคุณอาจไม่ต้องการพารามิเตอร์การดำเนินการ url และควรอธิบายเนื้อหาที่คุณอยู่หลังจากนั้นด้วยวิธีอื่น เนื่องจากคุณกำลังบอกว่าวิธีการส่งคืนข้อมูลจากเอนทิตีเดียวกันแล้วเพียงแค่ให้พารามิเตอร์ทำการอธิบายให้คุณ
ตัวอย่างเช่นสองวิธีของคุณอาจกลายเป็น:
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
คุณใช้ข้อมูลชนิดใดในวัตถุ MyVm หากคุณสามารถส่งผ่านตัวแปรผ่าน URI ได้ฉันขอแนะนำให้ไปที่เส้นทางนั้น มิฉะนั้นคุณจะต้องส่งวัตถุในเนื้อความของคำขอและนั่นไม่ใช่ HTTP ของคุณเมื่อทำการ GET (ใช้งานได้แค่ใช้ [FromBody] infront ของ MyVm)
หวังว่าสิ่งนี้แสดงให้เห็นว่าคุณสามารถมีวิธีการหลายวิธีในตัวควบคุมเดียวโดยไม่ต้องใช้ชื่อการกระทำหรือแม้กระทั่งแอตทริบิวต์ [HttpGet]