Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# ASP.NET WebAPI में कंटेंट नेगोशिएशन क्या है?

कंटेंट नेगोशिएशन उस प्रक्रिया को कहते हैं जब एक से अधिक रिप्रेजेंटेशन उपलब्ध हों तो दिए गए रिस्पॉन्स के लिए सर्वश्रेष्ठ रिप्रेजेंटेशन का चयन किया जाता है। मतलब, रिक्वेस्ट में Accept हेडर वैल्यू के आधार पर, सर्वर रिस्पॉन्स भेजता है।

कंटेंट नेगोशिएशन के लिए प्राथमिक HTTP हेडर्स

हेडरउद्देश्यउदाहरण
Acceptरिस्पॉन्स के लिए स्वीकार्य मीडिया टाइप्सapplication/json, application/xml
Accept-Charsetस्वीकार्य कैरेक्टर सेट्सUTF-8, ISO-8859-1
Accept-Encodingस्वीकार्य कंटेंट एन्कोडिंग्सgzip, deflate
Accept-Languageपसंदीदा नेचुरल लैंग्वेजen-US, hi-IN

कंटेंट नेगोशिएशन प्रक्रिया

  1. पाइपलाइन HttpConfiguration ऑब्जेक्ट से IContentNegotiator सर्विस प्राप्त करती है
  2. यह HttpConfiguration.Formatters कलेक्शन से मीडिया फॉर्मेटर्स की सूची भी प्राप्त करती है
  3. पाइपलाइन IContentNegotiator.Negotiate कॉल करती है, जिसमें पास करती है:
    • सीरियलाइज़ करने के लिए ऑब्जेक्ट का टाइप
    • मीडिया फॉर्मेटर्स का कलेक्शन
    • HTTP रिक्वेस्ट
  4. Negotiate मेथड दो जानकारी लौटाता है:
    • कौन सा फॉर्मेटर उपयोग करना है
    • रिस्पॉन्स के लिए मीडिया टाइप
  5. अगर कोई फॉर्मेटर नहीं मिलता, तो Negotiate null लौटाता है, और क्लाइंट को 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 फॉर्मेट में होगा।

C# ASP.NET WebAPI में कंटेंट नेगोशिएशन क्या है?

रिक्वेस्ट: Accept: application/json

रिस्पॉन्स JSON फॉर्मेट में होगा।

C# ASP.NET WebAPI में कंटेंट नेगोशिएशन क्या है?

Content-Type रिस्पॉन्स हेडर

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

C# ASP.NET WebAPI में कंटेंट नेगोशिएशन क्या है?

क्वालिटी फैक्टर (q-value)

हम क्वालिटी फैक्टर भी निर्दिष्ट कर सकते हैं। नीचे दिए गए उदाहरण में, XML का क्वालिटी फैक्टर JSON से अधिक है, इसलिए सर्वर XML फॉर्मेटर का उपयोग करता है और डेटा को XML में फॉर्मेट करता है।

Accept: application/xml;q=0.8, application/json;q=0.5

C# ASP.NET WebAPI में कंटेंट नेगोशिएशन क्या है?

डिफ़ॉल्ट व्यवहार (कोई 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 का एक मूलभूत पहलू है जो क्लाइंट्स को उनके पसंदीदा फॉर्मेट में डेटा अनुरोध करने की अनुमति देता है, जिससे इंटरऑपरेबिलिटी और फ्लेक्सिबिलिटी को बढ़ावा मिलता है।

  1. C# ASP.NET WebAPI में फिल्टर्स के विभिन्न प्रकार क्या हैं? C# ASP.NET WebAPI में फिल्टर्स के विभिन्न प्रकार क्या हैं?

    फिल्टर्स का उपयोग WebAPI फ्रेमवर्क रिक्वेस्ट प्रोसेसिंग के विभिन्न स्तरों पर अतिरिक्त लॉजिक इंजेक्ट करने के लिए किया जाता है। फिल्टर्स क्रॉस-कटिंग कंसर्न (लॉगिंग, ऑथराइज़ेशन, और कैशिंग) के लिए एक तरीका प्रदान करते हैं। फिल्टर्स को एक्शन मेथड या कंट्रोलर पर घोषणात्मक या प्रोग्रामेटिक तरीके से लागू कि

  1. C# ASP.NET WebAPI में CORS समस्या कैसे हल करें? C# ASP.NET WebAPI में CORS समस्या कैसे हल करें?

    क्रॉस-ओरिजिन रिसोर्स शेयरिंग (CORS) एक ऐसा तंत्र है जो ब्राउज़रों को यह बताने के लिए अतिरिक्त HTTP हेडर्स का उपयोग करता है कि एक ओरिजिन पर चल रहे वेब एप्लिकेशन को किसी अलग ओरिजिन से चुनिंदा रिसोर्सेज तक पहुंच दी जाए। एक वेब एप्लिकेशन एक क्रॉस-ओरिजिन HTTP रिक्वेस्ट निष्पादित करता है जब वह किसी ऐसे रि

  1. C# ASP.NET WebAPI में कंट्रोलर एक्शन के विभिन्न रिटर्न टाइप्स क्या हैं? C# ASP.NET WebAPI में कंट्रोलर एक्शन के विभिन्न रिटर्न टाइप्स क्या हैं?

    Web API एक्शन मेथड के निम्नलिखित रिटर्न टाइप्स हो सकते हैं। Void Primitive Type/Complex Type HttpResponseMessage IHttpActionResult 1. Void यह आवश्यक नहीं है कि सभी एक्शन मेथड्स कुछ न कुछ लौटाएं। इनका रिटर्न टाइप void हो सकता है। उदाहरण using DemoWebApplication.Models; using Syst