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

การเจรจาเนื้อหาใน Asp.Net webAPI C # คืออะไร


การเจรจาต่อรองเนื้อหาเป็นกระบวนการในการเลือกการนำเสนอที่ดีที่สุดสำหรับการตอบสนองที่กำหนด เมื่อมีการนำเสนอหลายรายการ หมายถึง ขึ้นอยู่กับค่าส่วนหัวยอมรับในคำขอ เซิร์ฟเวอร์ส่งการตอบกลับ กลไกหลักสำหรับการเจรจาเนื้อหาใน HTTP คือส่วนหัวของคำขอเหล่านี้ -

ยอมรับ − สื่อประเภทใดที่ยอมรับได้สำหรับการตอบกลับ เช่น "application/json" "application/xml" หรือประเภทสื่อที่กำหนดเอง เช่น "application/vnd.example+xml"

ยอมรับ-ชุดอักขระ − ชุดอักขระใดบ้างที่ยอมรับได้ เช่น UTF-8 หรือ ISO 8859-1

ยอมรับการเข้ารหัส − การเข้ารหัสเนื้อหาใดที่ยอมรับได้ เช่น gzip

ยอมรับ-ภาษา − ภาษาธรรมชาติที่ต้องการ เช่น "en-us"

เซิร์ฟเวอร์สามารถดูส่วนอื่นๆ ของคำขอ HTTP ได้ ตัวอย่างเช่น หากคำขอมีส่วนหัว X-Requested-With ซึ่งระบุคำขอ AJAX เซิร์ฟเวอร์อาจมีค่าเริ่มต้นเป็น JSON หากไม่มีส่วนหัวที่ยอมรับ

ในการเจรจาเนื้อหา ไปป์ไลน์ได้รับบริการ IContentNegotiator จากอ็อบเจ็กต์ HttpConfiguration นอกจากนี้ยังรับรายการตัวจัดรูปแบบสื่อจากคอลเลกชัน HttpConfiguration.Formatters

ถัดไป ไปป์ไลน์เรียก IContentNegotiator.Negotiate ผ่าน -

  • ประเภทของออบเจ็กต์ที่จะเรียงลำดับ
  • คอลเลกชันของตัวจัดรูปแบบสื่อ
  • คำขอ HTTP

วิธีการเจรจาจะส่งคืนข้อมูลสองส่วน -

  • รูปแบบใดที่จะใช้
  • ประเภทของสื่อสำหรับการตอบกลับ

หากไม่พบตัวจัดรูปแบบ เมธอด Negotiate จะคืนค่า null และไคลเอ็นต์ได้รับข้อผิดพลาด HTTP 406 (ไม่เป็นที่ยอมรับ)

ให้เราพิจารณา StudentController ด้านล่าง

using DemoWebApplication.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
   public class StudentController : ApiController{
      List<Student> students = new List<Student>{
         new Student{
            Id = 1,
            Name = "Mark"
         },
         new Student{
            Id = 2,
            Name = "John"
         }
      };
   }
}

หนึ่งในมาตรฐานของบริการ RESTful คือ ไคลเอ็นต์ควรมีความสามารถในการตัดสินใจว่าต้องการตอบกลับรูปแบบใด - XML, JSON เป็นต้น คำขอที่ส่งไปยังเซิร์ฟเวอร์จะมีส่วนหัวที่ยอมรับ การใช้ส่วนหัว Accept ลูกค้าสามารถระบุรูปแบบการตอบกลับได้ ตัวอย่างเช่น

Accept: application/xml returns XML
Accept: application/json returns JSON

ผลลัพธ์ด้านล่างแสดงการตอบสนองเป็น XML เมื่อเราส่ง Accept Header asapplication/XML

การเจรจาเนื้อหาใน Asp.Net webAPI C # คืออะไร

ผลลัพธ์ด้านล่างแสดงการตอบสนองของ JSON เมื่อเราส่ง Accept Header asapplication/JSON

การเจรจาเนื้อหาใน Asp.Net webAPI C # คืออะไร

เมื่อการตอบกลับถูกส่งไปยังไคลเอนต์ในรูปแบบที่ร้องขอ โปรดสังเกตว่าส่วนหัวของประเภทเนื้อหาของการตอบกลับถูกตั้งค่าเป็นค่าที่เหมาะสม ตัวอย่างเช่น หากไคลเอ็นต์ร้องขอ application/xml เซิร์ฟเวอร์จะส่งข้อมูลในรูปแบบ XML และตั้งค่า Content-Type=application/xml ด้วย

การเจรจาเนื้อหาใน Asp.Net webAPI C # คืออะไร

นอกจากนี้เรายังสามารถระบุปัจจัยด้านคุณภาพ ในตัวอย่างด้านล่าง xml มีปัจจัยด้านคุณภาพที่สูงกว่า json ดังนั้นเซิร์ฟเวอร์จึงใช้ตัวจัดรูปแบบ XML และจัดรูปแบบข้อมูลใน XML.application/xml;q=0.8,application/json;q=0.5

การเจรจาเนื้อหาใน Asp.Net webAPI C # คืออะไร