कंटेंट नेगोशिएशन उस प्रक्रिया को कहते हैं जब एक से अधिक रिप्रेजेंटेशन उपलब्ध हों तो दिए गए रिस्पॉन्स के लिए सर्वश्रेष्ठ रिप्रेजेंटेशन का चयन किया जाता है। मतलब, रिक्वेस्ट में Accept हेडर वैल्यू के आधार पर, सर्वर रिस्पॉन्स भेजता है।
कंटेंट नेगोशिएशन के लिए प्राथमिक HTTP हेडर्स
| हेडर | उद्देश्य | उदाहरण |
|---|---|---|
| Accept | रिस्पॉन्स के लिए स्वीकार्य मीडिया टाइप्स | application/json, application/xml |
| Accept-Charset | स्वीकार्य कैरेक्टर सेट्स | UTF-8, ISO-8859-1 |
| Accept-Encoding | स्वीकार्य कंटेंट एन्कोडिंग्स | gzip, deflate |
| Accept-Language | पसंदीदा नेचुरल लैंग्वेज | en-US, hi-IN |
कंटेंट नेगोशिएशन प्रक्रिया
- पाइपलाइन
HttpConfigurationऑब्जेक्ट सेIContentNegotiatorसर्विस प्राप्त करती है - यह
HttpConfiguration.Formattersकलेक्शन से मीडिया फॉर्मेटर्स की सूची भी प्राप्त करती है - पाइपलाइन
IContentNegotiator.Negotiateकॉल करती है, जिसमें पास करती है:- सीरियलाइज़ करने के लिए ऑब्जेक्ट का टाइप
- मीडिया फॉर्मेटर्स का कलेक्शन
- HTTP रिक्वेस्ट
Negotiateमेथड दो जानकारी लौटाता है:- कौन सा फॉर्मेटर उपयोग करना है
- रिस्पॉन्स के लिए मीडिया टाइप
- अगर कोई फॉर्मेटर नहीं मिलता, तो
Negotiatenull लौटाता है, और क्लाइंट को HTTP 406 (Not Acceptable) मिलता है
उदाहरण: StudentController
using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Web.Http;
namespace DemoWebApplication.Controllers
{
public class StudentController : ApiController
{
List students = new List
{
new Student { Id = 1, Name = "Mark" },
new Student { Id = 2, Name = "John" }
};
public IEnumerable Get()
{
return students;
}
}
}
Accept हेडर के साथ टेस्टिंग
रिक्वेस्ट: Accept: application/xml
रिस्पॉन्स XML फॉर्मेट में होगा।

रिक्वेस्ट: Accept: application/json
रिस्पॉन्स JSON फॉर्मेट में होगा।

Content-Type रिस्पॉन्स हेडर
जब रिस्पॉन्स क्लाइंट को अनुरोधित फॉर्मेट में भेजा जाता है, तो ध्यान दें कि रिस्पॉन्स का Content-Type हेडर उपयुक्त मान पर सेट होता है। उदाहरण के लिए, अगर क्लाइंट ने application/xml अनुरोध किया है, तो सर्वर डेटा को XML फॉर्मेट में भेजता है और Content-Type=application/xml भी सेट करता है।

क्वालिटी फैक्टर (q-value)
हम क्वालिटी फैक्टर भी निर्दिष्ट कर सकते हैं। नीचे दिए गए उदाहरण में, XML का क्वालिटी फैक्टर JSON से अधिक है, इसलिए सर्वर XML फॉर्मेटर का उपयोग करता है और डेटा को XML में फॉर्मेट करता है।
Accept: application/xml;q=0.8, application/json;q=0.5

डिफ़ॉल्ट व्यवहार (कोई Accept हेडर नहीं)
जब कोई Accept हेडर नहीं होता, तो Web API डिफ़ॉल्ट रूप से JSON लौटाता है (पहला रजिस्टर्ड फॉर्मेटर)।
फॉर्मेटर कॉन्फिगरेशन
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// JSON फॉर्मेटर कॉन्फिगर करें
var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
jsonFormatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
// XML फॉर्मेटर कॉन्फिगर करें
var xmlFormatter = config.Formatters.XmlFormatter;
xmlFormatter.UseXmlSerializer = true;
// कस्टम फॉर्मेटर जोड़ें
config.Formatters.Add(new CsvMediaTypeFormatter());
}
}
कंट्रोलर/एक्शन लेवल पर ओवरराइड
// केवल JSON के लिए बाध्य करें
[Produces("application/json")]
public IHttpActionResult GetJsonOnly() { ... }
// केवल XML के लिए बाध्य करें
[Produces("application/xml")]
public IHttpActionResult GetXmlOnly() { ... }
// विशिष्ट फॉर्मेटर्स के साथ
[Produces("application/json", "application/xml", "text/csv")]
public IHttpActionResult GetMultiple() { ... }
क्लाइंट-साइड: Accept हेडर सेट करना
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://localhost:58174/api/");
// JSON अनुरोध करें
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
// XML अनुरोध करें
// client.DefaultRequestHeaders.Accept.Add(
// new MediaTypeWithQualityHeaderValue("application/xml"));
var response = await client.GetAsync("students");
var students = await response.Content.ReadAsAsync>();
}
ASP.NET Core में कंटेंट नेगोशिएशन
// Program.cs / Startup.cs
builder.Services.AddControllers(options =>
{
options.RespectBrowserAcceptHeader = true; // ब्राउज़र Accept हेडर का सम्मान करें
})
.AddXmlSerializerFormatters() // XML सपोर्ट जोड़ें
.AddXmlDataContractSerializerFormatters();
// कंट्रोलर में
[HttpGet]
[Produces("application/json", "application/xml")]
public IActionResult Get() => Ok(new { Message = "Hello" });
मुख्य बिंदु: कंटेंट नेगोशिएशन RESTful APIs का एक मूलभूत पहलू है जो क्लाइंट्स को उनके पसंदीदा फॉर्मेट में डेटा अनुरोध करने की अनुमति देता है, जिससे इंटरऑपरेबिलिटी और फ्लेक्सिबिलिटी को बढ़ावा मिलता है।