एक मीडिया टाइप, जिसे 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] एट्रिब्यूट्स का उपयोग करें।