เมื่อ ASP.NET Web API เรียกใช้เมธอดบนคอนโทรลเลอร์ จะต้องตั้งค่าสำหรับพารามิเตอร์ ซึ่งเป็นกระบวนการที่เรียกว่าการโยงพารามิเตอร์
ในการผูกโมเดล (พารามิเตอร์การดำเนินการ) ซึ่งโดยปกติจะมีค่าเริ่มต้นเป็นตัวจัดรูปแบบ จาก URI เราจำเป็นต้องตกแต่งด้วยแอตทริบิวต์ [FromUri] FromUriAttribute สืบทอดจาก ModelBinderAttribute โดยให้คำสั่งลัดแก่เราในการสั่ง Web API ให้ดึงพารามิเตอร์เฉพาะจาก URI โดยใช้ ValueProviders ที่กำหนดไว้ใน IuriValueProviderFactory แอตทริบิวต์นั้นถูกปิดผนึกและไม่สามารถขยายได้อีก แต่คุณเพิ่ม IuriValueProviderFactories แบบกำหนดเองได้มากเท่าที่คุณต้องการ
แอตทริบิวต์ [FromBody] ที่สืบทอดคลาส ParameterBindingAttribute ใช้เพื่อเติมพารามิเตอร์และคุณสมบัติของพารามิเตอร์จากเนื้อหาของคำขอ HTTP รันไทม์ ASP.NET มอบหมายความรับผิดชอบในการอ่านเนื้อหาไปยังฟอร์แมตเตอร์อินพุต เมื่อใช้ [FromBody] กับพารามิเตอร์ประเภทที่ซับซ้อน แอตทริบิวต์ที่มาที่มีผลผูกพันใดๆ ที่ใช้กับคุณสมบัติของพารามิเตอร์นั้นจะถูกละเว้น
ตัวอย่างแอตทริบิวต์ FromUri −
ตัวอย่าง
using System.Collections.Generic; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoController : ApiController{ public IEnumerable<string> Get([FromUri] string id, [FromUri] string name){ return new string[]{ $"The Id of the Student is {id}", $"The Name of the Student is {name}" }; } } }
สำหรับตัวอย่างข้างต้น ให้เราส่งค่าของ id และชื่อใน URI เพื่อเติมลงในตัวแปรที่เกี่ยวข้องในเมธอด Get
https://localhost:58174/api/demo?id=1&name=Mark
ผลลัพธ์
ผลลัพธ์ของโค้ดด้านบนคือ
ตัวอย่างแอตทริบิวต์ FromBody −
ตัวอย่าง
ให้เราสร้างโมเดลนักศึกษาที่มีคุณสมบัติดังต่อไปนี้
namespace DemoWebApplication.Models{ public class Student{ public int Id { get; set; } public string Name { get; set; } } }
รหัสคอนโทรลเลอร์ −
ตัวอย่าง
using DemoWebApplication.Models; using System.Collections.Generic; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoController : ApiController{ public IEnumerable<string> Get([FromBody] Student student){ return new string[]{ $"The Id of the Student is {student.Id}", $"The Name of the Student is {student.Name}" }; } } }
สำหรับตัวอย่างข้างต้น ค่าสำหรับนักเรียนจะถูกส่งต่อในเนื้อหาคำขอ และมีการแมปกับคุณสมบัติที่สอดคล้องกันของวัตถุ Student ด้านล่างนี้คือคำขอและการตอบกลับโดยใช้บุรุษไปรษณีย์