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

C# ASP.NET WebAPI में MIME टाइप कैसे निर्दिष्ट करें?

एक मीडिया टाइप, जिसे MIME टाइप भी कहा जाता है, डेटा के टुकड़े के फॉर्मेट की पहचान करता है। HTTP में, मीडिया टाइप्स मैसेज बॉडी के फॉर्मेट का वर्णन करते हैं। एक मीडिया टाइप में दो स्ट्रिंग्स होती हैं - एक टाइप और एक सबटाइप।

सामान्य MIME टाइप्स

  • text/html - HTML दस्तावेज़
  • application/json - JSON डेटा
  • application/xml - XML डेटा
  • image/png, image/jpeg - इमेजेज
  • application/octet-stream - बाइनरी डेटा
  • multipart/form-data - फाइल अपलोड

Content-Type और Accept हेडर्स

  • Content-Type: रिक्वेस्ट/रिस्पॉन्स बॉडी का फॉर्मेट निर्दिष्ट करता है
  • Accept: क्लाइंट को बताता है कि सर्वर से कौन से मीडिया टाइप्स स्वीकार्य हैं

Web API में मीडिया टाइप फॉर्मेटर्स

Web API में बिल्ट-इन सपोर्ट है:

  • JSON - JsonMediaTypeFormatter
  • XML - XmlMediaTypeFormatter
  • BSON
  • Form-urlencoded

WebApiConfig में मीडिया टाइप्स कॉन्फिगर करना

उदाहरण: केवल JSON लौटाएं (XML फॉर्मेटर हटाएं)

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
        
        // XML फॉर्मेटर हटाएं - केवल JSON सपोर्ट
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

उदाहरण: केवल XML लौटाएं (JSON फॉर्मेटर हटाएं)

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
        
        // JSON फॉर्मेटर हटाएं - केवल XML सपोर्ट
        config.Formatters.Remove(config.Formatters.JsonFormatter);
        
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

उदाहरण: ब्राउज़र रिक्वेस्ट के लिए JSON लौटाएं (डिफ़ॉल्ट XML के बजाय)

ब्राउज़र डिफ़ॉल्ट रूप से Accept: text/html भेजते हैं, जिससे Web API XML लौटाता है। JSON के लिए बाध्य करने के लिए:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
        
        // JSON फॉर्मेटर को text/html सपोर्ट करने के लिए कॉन्फिगर करें
        config.Formatters.JsonFormatter.SupportedMediaTypes
            .Add(new MediaTypeHeaderValue("text/html"));
        
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

कंट्रोलर लेवल पर कंटेंट नेगोशिएशन

public class StudentController : ApiController
{
    // विशिष्ट एक्शन के लिए केवल JSON
    [Produces("application/json")]
    public IHttpActionResult GetJsonOnly()
    {
        return Ok(new { Message = "Only JSON" });
    }
    
    // विशिष्ट एक्शन के लिए केवल XML
    [Produces("application/xml")]
    public IHttpActionResult GetXmlOnly()
    {
        return Ok(new { Message = "Only XML" });
    }
    
    // दोनों सपोर्ट करें, क्वालिटी फैक्टर के साथ
    [Produces("application/json", "application/xml")]
    public IHttpActionResult GetBoth()
    {
        return Ok(new { Message = "Both supported" });
    }
}

कस्टम मीडिया टाइप फॉर्मेटर बनाना

public class CsvMediaTypeFormatter : BufferedMediaTypeFormatter
{
    public CsvMediaTypeFormatter()
    {
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/csv"));
    }

    public override bool CanReadType(Type type)
    {
        return typeof(IEnumerable).IsAssignableFrom(type);
    }

    public override bool CanWriteType(Type type)
    {
        return typeof(IEnumerable).IsAssignableFrom(type);
    }

    public override void WriteToStream(Type type, object value, Stream writeStream, HttpContent content)
    {
        using (var writer = new StreamWriter(writeStream))
        {
            // CSV लेखन तर्क यहां
        }
    }
}

// रजिस्ट्रेशन
config.Formatters.Add(new CsvMediaTypeFormatter());

क्लाइंट-साइड: Accept हेडर सेट करना

using (var client = new HttpClient())
{
    // JSON अनुरोध करें
    client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));
    
    // XML अनुरोध करें
    // client.DefaultRequestHeaders.Accept.Add(
    //     new MediaTypeWithQualityHeaderValue("application/xml"));
    
    // क्वालिटी फैक्टर के साथ (प्राथमिकता दर्शाता है)
    // client.DefaultRequestHeaders.Accept.Add(
    //     new MediaTypeWithQualityHeaderValue("application/json", 1.0));
    // client.DefaultRequestHeaders.Accept.Add(
    //     new MediaTypeWithQualityHeaderValue("application/xml", 0.8));
    
    var response = await client.GetAsync("api/students");
    var students = await response.Content.ReadAsAsync>();
}

नोट: ASP.NET Core में, MVC विकल्पों में OutputFormatters और InputFormatters कॉन्फिगर करें, और [Produces]/[Consumes] एट्रिब्यूट्स का उपयोग करें।

  1. C# ASP.NET WebAPI में एक्शन मेथड के लिए उपनाम (Alias) नाम कैसे असाइन करें? C# ASP.NET WebAPI में एक्शन मेथड के लिए उपनाम (Alias) नाम कैसे असाइन करें?

    कंट्रोलर में एक पब्लिक मेथड को एक्शन मेथड कहा जाता है। आइए एक उदाहरण पर विचार करें जहां DemoController क्लास ApiController से डेराइव्ड है और इसमें कई एक्शन मेथड्स हैं जिनके नाम HTTP वर्ब्स जैसे Get, Post, Put और Delete से मेल खाते हैं। उदाहरण public class DemoController : ApiController { public

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

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

  1. C# ASP.NET WebAPI में एक्शन मेथड से कस्टम रिजल्ट टाइप कैसे लौटाएं? C# ASP.NET WebAPI में एक्शन मेथड से कस्टम रिजल्ट टाइप कैसे लौटाएं?

    हम IHttpActionResult इंटरफ़ेस को इम्प्लीमेंट करके अपनी खुद की कस्टम क्लास को रिजल्ट टाइप के रूप में बना सकते हैं। IHttpActionResult में एक सिंगल मेथड, ExecuteAsync होता है, जो एसिंक्रोनसली एक HttpResponseMessage इंस्टेंस बनाता है। public interface IHttpActionResult { Task ExecuteAsync(Cancellat