asp.net-web-api
ASP.NET वेब एपीआई MediaTypeFormatter
खोज…
MediaTypeFormatter बुनियादी जानकारी
MediaTypeFormatter एक अमूर्त वर्ग है जिसमें से JsonMediaTypeFormatter और XmlMediaTypeFormatter वर्ग विरासत में XmlMediaTypeFormatter हैं। यहाँ, JsonMediaTypeFormatter वर्ग JSON ऑब्जेक्ट्स और XmlMediaTypeFormatter क्लास XML ऑब्जेक्ट्स को हैंडल करता है।
केवल हेडर मान को स्वीकार किए बिना JSON लौटें:
अनुरोध मौसम की प्रतिक्रिया में केवल JSON ऑब्जेक्ट्स को वापस करने के लिए यदि application/json या application/xml WebApiConfig वर्ग के Register विधि में निम्नलिखित पंक्ति लिखता है, तो अनुरोध के हेडर मूल्य को स्वीकार करें।
config.Formatters.Remove(config.Formatters.XmlFormatter);
यहाँ, config HttpConfiguration वर्ग का एक ऑब्जेक्ट है। कोड की यह लाइन पूरी तरह से XmlFormatter को हटा XmlFormatter जो ASP.NET वेब एपीआई को हमेशा क्लाइंट अनुरोध में स्वीकार्य हेडर मान के बावजूद JSON को वापस करने के लिए मजबूर करता है। इस तकनीक का उपयोग तब करें जब आप चाहते हैं कि आपकी सेवा केवल JSON का समर्थन करे और XML का नहीं।
केवल हेडर मान स्वीकार करने के बावजूद XML लौटें:
अनुरोध मौसम की प्रतिक्रिया में केवल XML ऑब्जेक्ट्स को वापस करने के लिए यदि application/json या application/xml WebApiConfig वर्ग के Register विधि में निम्नलिखित पंक्ति लिखता है, तो अनुरोध के हेडर मूल्य को स्वीकार करें।
config.Formatters.Remove(config.Formatters.JsonFormatter);
यहाँ, config HttpConfiguration क्लास की एक वस्तु है जैसा कि ऊपर वर्णित है। कोड की यह लाइन पूरी तरह से JsonFormatter को हटा JsonFormatter जो ASP.NET वेब एपीआई को हमेशा क्लाइंट अनुरोध में एक्सेप्ट हेडर मान के XML को वापस करने के लिए मजबूर करती है। जब आप अपनी सेवा केवल XML का समर्थन करना चाहते हैं और JSON नहीं, तो इस तकनीक का उपयोग करें।
XML के बजाय JSON लौटाएं:
- जब ब्राउज़र से एक अनुरोध जारी किया जाता है, तो वेब एपीआई सेवा को XML के बजाय JSON वापस करना चाहिए।
- जब एक उपकरण से एक अनुरोध जारी किया जाता है जैसे कि फ़िडलर स्वीकार करें हेडर मान का सम्मान किया जाना चाहिए। इसका मतलब यह है कि अगर एक्सेप्ट हेडर एप्लीकेशन / xml पर सेट है तो सर्विस को XML को वापस कर देना चाहिए और यदि यह एप्लीकेशन / json पर सेट है तो सर्विस को JSON वापस कर देना चाहिए।
विधि 1:
निम्न पंक्ति को WebApiConfig वर्ग के Register विधि में शामिल करें।
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
यह ASP.NET वेब एपीआई को JsonFormatter का उपयोग करने का निर्देश देता है जब अनुरोध text/html किया जाता है जो कि अधिकांश ब्राउज़रों के लिए डिफ़ॉल्ट है। इस दृष्टिकोण के साथ समस्या यह है कि प्रतिक्रिया के Content-Type हेडर को text/html सेट किया जाता है जो भ्रामक है।
विधि 2:
कस्टम फ़ॉर्मेटर्स का उपयोग करें। एक वर्ग बनाएं जो JsonMediaTypeFormatter वर्ग से लिया गया है और SetDefaultContentHeaders विधि को लागू करें।
यहाँ कस्टम JSON फॉर्मैटर क्लास का उदाहरण दिया गया है जो प्रतिक्रिया में JSON फॉर्मेट देता है।
public class CustomJsonFormatter : JsonMediaTypeFormatter
{
public CustomJsonFormatter()
{
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.ContentType = new MediaTypeHeaderValue("application/json");
}
}
और यह कस्टम मीडिया प्रकार के फ़ॉर्मैटर का उदाहरण है जो प्रतिक्रिया में CSV प्रारूप देता है।
public class CSVMediaTypeFormatter : MediaTypeFormatter {
public CSVMediaTypeFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
}
public CSVMediaTypeFormatter(MediaTypeMapping mediaTypeMapping) : this()
{
MediaTypeMappings.Add(mediaTypeMapping);
}
public CSVMediaTypeFormatter(IEnumerable<MediaTypeMapping> mediaTypeMappings) : this()
{
foreach (var mediaTypeMapping in mediaTypeMappings)
{
MediaTypeMappings.Add(mediaTypeMapping);
}
}
}
कस्टम फ़ॉर्मैटर क्लास को लागू करने के बाद, इसे WebApiConfig क्लास के Register मेथड में Register ।
config.Formatters.Add(new CustomJsonFormatter());
अब, आपके फ़ॉर्मेटर के अनुसार आपको सर्वर से प्रतिक्रिया और Content-Type मिलेगा।