2013-06-13 4 views
66

कुछ मामलों में मेरे पास न्यूटन सॉफ्ट जेएसओएन.नेट है और मेरे नियंत्रक में मैं सिर्फ अपने नियंत्रक से जॉबजेक्ट लौटाता हूं और सब अच्छा है।Asp.net WEBAPI से स्पष्ट रूप से एक JSON स्ट्रिंग लौटाएं?

लेकिन मेरे पास ऐसा कोई मामला है जहां मुझे किसी अन्य सेवा से कुछ कच्चे JSON मिलते हैं और इसे मेरे वेबएपीआई से वापस करने की आवश्यकता होती है। इस संदर्भ में मैं न्यूटनसोफ्ट का उपयोग नहीं कर सकता, लेकिन अगर मैं कर सकता तो मैं स्ट्रिंग से जॉबेट बनाउंगा (जो अनियंत्रित प्रोसेसिंग ओवरहेड की तरह लगता है) और इसे वापस लौटाएं और सभी दुनिया के साथ अच्छे होंगे।

हालांकि, मैं इसे आसानी से वापस करना चाहता हूं, लेकिन अगर मैं स्ट्रिंग लौटाता हूं, तो ग्राहक को मेरे संदर्भ के साथ एक एन्कोडेड स्ट्रिंग के रूप में एक JSON wrapper प्राप्त होता है।

मैं अपने वेबएपीआई नियंत्रक विधि से स्पष्ट रूप से JSON कैसे वापस कर सकता हूं?

उत्तर

162

कुछ विकल्प हैं। सबसे सरल एक अपने विधि एक HttpResponseMessage लौटने के लिए, नीचे दिए गए कोड को कुछ इसी तरह है, और एक StringContent अपने स्ट्रिंग के आधार पर के साथ उस प्रतिक्रिया बनाने के लिए है:

public HttpResponseMessage Get() 
{ 
    string yourJson = GetJsonFromSomewhere(); 
    var response = this.Request.CreateResponse(HttpStatusCode.OK); 
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json"); 
    return response; 
} 

और जाँच शून्य या खाली JSON स्ट्रिंग

public HttpResponseMessage Get() 
{ 
    string yourJson = GetJsonFromSomewhere(); 
    if (!string.IsNullOrEmpty(yourJson)) 
    { 
     var response = this.Request.CreateResponse(HttpStatusCode.OK); 
     response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json"); 
     return response; 
    } 
    throw new HttpResponseException(HttpStatusCode.NotFound); 
} 
+0

अद्भुत !! धन्यवाद कार्लोस! :) – ManJan

+4

उत्कृष्ट। मैं एक JSON स्ट्रिंग बना रहा था और इसे एक स्ट्रिंग के रूप में लौटा रहा था, लेकिन परिणामस्वरूप "अपरिहार्य अतिरिक्त" पेश किया गया था। इसे ठीक करना चाहिए। – dumbledad

+0

यह कष्टप्रद है। आपको वास्तव में 'HttpResponseMessage प्रतिक्रिया' बनाना है, फिर 'स्ट्रिंगकंटेंट' को असाइन करना होगा 'सामग्री' संपत्ति। यदि आप कन्स्ट्रक्टर में स्ट्रिंगकंटेंट असाइन करते हैं तो यह काम नहीं करता है। – Suamere

2

यदि आप विशेष रूप से वेबएपीआई सुविधाओं (जैसे एक्सएमएल की अनुमति देने) के बिना उस JSON को वापस करना चाहते हैं, तो आप हमेशा आउटपुट पर सीधे लिख सकते हैं। मान लें कि आप इसे एएसपी.नेट के साथ होस्ट कर रहे हैं, आपके पास Response ऑब्जेक्ट तक पहुंच है, इसलिए आप इसे स्ट्रिंग के रूप में लिख सकते हैं, फिर आपको वास्तव में अपनी विधि से कुछ भी वापस करने की आवश्यकता नहीं है - आप पहले ही लिखे हैं आउटपुट स्ट्रीम के लिए प्रतिक्रिया पाठ।

संबंधित मुद्दे