Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

แอตทริบิวต์ FromBody และ FromUri ใน C # ASP.NETWebAPI แตกต่างกันอย่างไร


เมื่อ 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 และ FromUri ใน C # ASP.NETWebAPI แตกต่างกันอย่างไร

ตัวอย่างแอตทริบิวต์ 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 ด้านล่างนี้คือคำขอและการตอบกลับโดยใช้บุรุษไปรษณีย์

แอตทริบิวต์ FromBody และ FromUri ใน C # ASP.NETWebAPI แตกต่างกันอย่างไร