सामग्री बातचीत किसी दिए गए प्रतिक्रिया के लिए सबसे अच्छा प्रतिनिधित्व चुनने की प्रक्रिया है जब कई प्रतिनिधित्व उपलब्ध होते हैं। मतलब, अनुरोध में हेडर मान को स्वीकार करने के आधार पर, सर्वर प्रतिक्रिया भेजता है। HTTP में सामग्री वार्ता के लिए प्राथमिक तंत्र ये अनुरोध शीर्षलेख हैं -
स्वीकार करें - प्रतिक्रिया के लिए कौन से मीडिया प्रकार स्वीकार्य हैं, जैसे "एप्लिकेशन/जेसन," "एप्लिकेशन/एक्सएमएल," या एक कस्टम मीडिया प्रकार जैसे "एप्लिकेशन/vnd.example+xml"
स्वीकार करें-वर्णसेट - कौन से वर्ण सेट स्वीकार्य हैं, जैसे UTF-8 या ISO 8859-1।
स्वीकार-एन्कोडिंग - कौन सी सामग्री एन्कोडिंग स्वीकार्य है, जैसे कि gzip।
स्वीकार-भाषा - पसंदीदा प्राकृतिक भाषा, जैसे "एन-यूएस"।
सर्वर HTTP अनुरोध के अन्य भागों को भी देख सकता है। उदाहरण के लिए, यदि अनुरोध में एक एक्स-अनुरोधित-साथ शीर्षलेख है, जो एक AJAX अनुरोध को इंगित करता है, तो सर्वर JSON के लिए डिफ़ॉल्ट हो सकता है यदि कोई स्वीकृति शीर्षलेख नहीं है।
सामग्री बातचीत में, पाइपलाइन को HttpConfiguration ऑब्जेक्ट से IContentNegotiator सेवा मिलती है। इसे HttpConfiguration.Formatters संग्रह से मीडिया फॉर्मेटर्स की सूची भी मिलती है।
इसके बाद, पाइपलाइन IContentNegotiator.Negotiate को कॉल करती है, −
. में गुजरती है- क्रमबद्ध करने के लिए वस्तु का प्रकार
- मीडिया फॉर्मेटर्स का संग्रह
- HTTP अनुरोध
नेगोशिएट विधि जानकारी के दो टुकड़े लौटाती है -
- कौन सा फॉर्मेटर इस्तेमाल करना है
- प्रतिक्रिया के लिए मीडिया प्रकार
यदि कोई फ़ॉर्मेटर नहीं मिलता है, तो निगोशिएट विधि शून्य हो जाती है, और क्लाइंट को HTTP त्रुटि 406 (स्वीकार्य नहीं) प्राप्त होती है।
आइए हम नीचे की तरह स्टूडेंटकंट्रोलर पर विचार करें।
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: application/xml returns XML Accept: application/json returns JSON
नीचे दिए गए आउटपुट से पता चलता है कि प्रतिक्रिया एक्सएमएल की है जब हम एक्सेप्ट हैडर को एप्लिकेशन/एक्सएमएल के रूप में पास करते हैं।
नीचे दिए गए आउटपुट से पता चलता है कि प्रतिक्रिया JSON की है जब हम एक्सेप्ट हैडर को एप्लिकेशन/JSON के रूप में पास करते हैं।
जब ग्राहक को अनुरोधित प्रारूप में प्रतिक्रिया भेजी जा रही है, तो ध्यान दें कि प्रतिक्रिया का सामग्री-प्रकार शीर्षलेख उचित मान पर सेट है। उदाहरण के लिए, यदि क्लाइंट ने एप्लिकेशन/एक्सएमएल का अनुरोध किया है, तो सर्वर एक्सएमएल प्रारूप में डेटा भेजता है और सामग्री-प्रकार =एप्लिकेशन/एक्सएमएल भी सेट करता है।
हम गुणवत्ता कारक भी निर्दिष्ट कर सकते हैं। नीचे दिए गए उदाहरण में, xml में json की तुलना में उच्च गुणवत्ता कारक है, इसलिए सर्वर XML फॉर्मेटर का उपयोग करता है और डेटा को XML.application/xml;q=0.8,application/json;q=0.5
में प्रारूपित करता है।