นี่เป็นการเปลี่ยนแปลงจากเบต้าเป็น RC อย่างแน่นอน ในตัวอย่างที่ให้ไว้ในคำถามตอนนี้คุณต้องตกแต่งการกระทำของคุณด้วย [HttpGet] หรือ [AcceptVerbs ("GET")]
สิ่งนี้ทำให้เกิดปัญหาหากคุณต้องการผสมการกระทำที่ใช้คำกริยา (เช่น "GetSomething", "PostSomething") กับการกระทำที่ไม่ใช่คำกริยา หากคุณพยายามใช้แอตทริบิวต์ข้างต้นจะทำให้เกิดความขัดแย้งกับการกระทำที่ใช้คำกริยาในคอนโทรลเลอร์ วิธีหนึ่งในการกระตุ้นซึ่งจะกำหนดเส้นทางแยกกันสำหรับคำกริยาแต่ละคำและตั้งค่าการกระทำเริ่มต้นเป็นชื่อของคำกริยา วิธีนี้สามารถใช้เพื่อกำหนดทรัพยากรลูกใน API ของคุณ ตัวอย่างเช่นรหัสต่อไปนี้รองรับ: "/ resource / id / children" โดยที่ id และ children เป็นทางเลือก
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") }
);
หวังว่า Web API เวอร์ชันอนาคตจะรองรับสถานการณ์นี้ได้ดีขึ้น ขณะนี้เป็นเรื่องที่ลงทะเบียนในโครงการ CodePlex aspnetwebstack ที่ http://aspnetwebstack.codeplex.com/workitem/184 หากนี่คือสิ่งที่คุณต้องการเห็นโปรดลงคะแนนให้กับปัญหานี้