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

เราจะระบุประเภท MIME ใน Asp.Net WebAPI C # ได้อย่างไร


ประเภทสื่อหรือที่เรียกว่าประเภท MIME ระบุรูปแบบของข้อมูล ใน HTTP ชนิดสื่อจะอธิบายรูปแบบของเนื้อหาข้อความ ประเภทสื่อประกอบด้วยสองสตริง ประเภทและประเภทย่อย ตัวอย่างเช่น −

  • ข้อความ/html
  • รูปภาพ/png
  • application/json

เมื่อข้อความ HTTP มีเอนทิตี-เนื้อหา ส่วนหัวของประเภทเนื้อหาจะระบุรูปแบบของเนื้อหาข้อความ สิ่งนี้จะบอกผู้รับถึงวิธีการแยกวิเคราะห์เนื้อหาของข้อความ

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

ยอมรับ:text/html,application/xhtml+xml,application/xml

ประเภทสื่อกำหนดวิธีที่ Web API ทำให้เป็นอันดับและยกเลิกการซีเรียลไลซ์เนื้อหาข้อความ HTTP Web API มีการรองรับในตัวสำหรับ XML, JSON, BSON และข้อมูลที่เข้ารหัสแบบฟอร์เมอร์ และคุณรองรับประเภทสื่อเพิ่มเติมได้โดยการเขียนตัวจัดรูปแบบสื่อ

MediaTypeFormatter เป็นคลาสนามธรรมที่คลาส JsonMediaTypeFormatter และ XmlMediaTypeFormatter สืบทอดมา JsonMediaTypeFormatter จัดการ JSON และ XmlMediaTypeFormatter จัดการ XML มีการระบุประเภทสื่อในวิธีการ Register ของคลาส WebApiConfig มาดูตัวอย่างการใช้งานประเภทสื่อกัน

นักเรียนควบคุม

ตัวอย่าง

ใช้ DemoWebApplication.Models ใช้ DemoWebApplication.Models ใช้ System.Collections.Generic ใช้ System.Linq ใช้ System.Web.Http;namespace DemoWebApplication.Controllers{ ชั้นเรียนสาธารณะ StudentController :ApiController{ รายชื่อนักเรียน  =ใหม่ รายชื่อ <นักเรียน>{ นักเรียนใหม่{ Id =1, Name ="Mark" } นักเรียนใหม่{ Id =2, Name ="John" } }; IEnumerable สาธารณะ  Get (){ ส่งคืนนักเรียน; } }}

ตัวอย่างการส่งกลับเฉพาะ JSON จาก ASP.NET Web API Service โดยไม่คำนึงถึงค่าส่วนหัวที่ยอมรับ -

<ก่อนหน้า> WebApiConfig คลาสสแตติกสาธารณะ { การลงทะเบียนโมฆะสแตติกสาธารณะ (การกำหนดค่า HttpConfiguration) { config.MapHttpAttributeRoutes (); config.Formatters.Remove (config.Formatters.XmlFormatter); config.Routes.MapHttpRoute ( ชื่อ:"DefaultApi", routeTemplate:"api/{controller}/{id}", ค่าเริ่มต้น:new { id =RouteParameter.Optional } ); }}

เมื่อใช้โค้ดข้างต้น เราได้ลบ XmlFormatter ซึ่งบังคับให้ ASP.NET Web API ส่งคืน JSON เสมอโดยไม่คำนึงถึงค่าส่วนหัวที่ยอมรับในคำขอของไคลเอ็นต์ ใช้เทคนิคนี้เมื่อคุณต้องการให้บริการของคุณรองรับเฉพาะ JSON ไม่ใช่ XML

เราจะระบุประเภท MIME ใน Asp.Net WebAPI C # ได้อย่างไร

จากผลลัพธ์ข้างต้น เราสามารถเห็นโดยไม่คำนึงถึงการยอมรับค่าส่วนหัว application/xml บริการ Web API จะส่งคืน JSON เสมอ

ตัวอย่างการส่งกลับเฉพาะ XML จาก ASP.NET Web API Service โดยไม่คำนึงถึงค่าส่วนหัวที่ยอมรับ -

<ก่อนหน้า> WebApiConfig คลาสสแตติกสาธารณะ { การลงทะเบียนโมฆะสแตติกสาธารณะ (การกำหนดค่า HttpConfiguration) { config.MapHttpAttributeRoutes (); config.Formatters.Remove (config.Formatters.JsonFormatter); config.Routes.MapHttpRoute ( ชื่อ:"DefaultApi", routeTemplate:"api/{controller}/{id}", ค่าเริ่มต้น:new { id =RouteParameter.Optional } ); }}

เราจะระบุประเภท MIME ใน Asp.Net WebAPI C # ได้อย่างไร

จากผลลัพธ์ข้างต้น เราสามารถเห็นโดยไม่คำนึงถึงค่าของส่วนหัว Accept application/json ว่าบริการ Web API กำลังส่งคืน XML

ตัวอย่างการส่งคืน JSON แทน XML จาก ASP.NET Web API Service เมื่อมีการร้องขอจากเบราว์เซอร์ -

เมื่อมีการร้องขอจากเบราว์เซอร์ไปยัง StudentController ของเรา การตอบกลับจะอยู่ในรูปแบบ XML เนื่องจากเบราว์เซอร์ส่งส่วนหัวที่ยอมรับเป็นข้อความ/html โดยค่าเริ่มต้น

เราจะระบุประเภท MIME ใน Asp.Net WebAPI C # ได้อย่างไร

ตอนนี้ให้เราดูวิธีการส่งการตอบสนอง JSON แทน XML เมื่อมีการออกคำขอจากเบราว์เซอร์

<ก่อนหน้า> WebApiConfig คลาสสแตติกสาธารณะ { การลงทะเบียนโมฆะสแตติกสาธารณะ (การกำหนดค่า HttpConfiguration) { config.MapHttpAttributeRoutes (); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(ใหม่ MediaTypeHeaderValue("text/html")); config.Routes.MapHttpRoute ( ชื่อ:"DefaultApi", routeTemplate:"api/{controller}/{id}", ค่าเริ่มต้น:new { id =RouteParameter.Optional } ); }}

ผลลัพธ์ด้านล่างแสดงการตอบสนองเป็นประเภท JSON เมื่อคำขอถูกไล่ออกจากเบราว์เซอร์โดยไม่คำนึงถึงข้อความส่วนหัวที่ยอมรับ/html

เราจะระบุประเภท MIME ใน Asp.Net WebAPI C # ได้อย่างไร