2012-09-24 29 views
32

मेरे एक अनुरोध में से एक में, मैं कुछ सामग्री के साथ एक HttpResponseMessage वापस करना चाहता हूं। वर्तमान में मैं इसे निम्नानुसार काम कर रहा हूं:वेब एपीआई: HttpResponseMessage में सामग्री

var header = new MediaTypeHeaderValue("text/xml"); 
Request.CreateResponse(HttpStatusCode.OK, myObject, header); 

हालांकि, चूंकि मैं स्थिर अनुरोध का उपयोग कर रहा हूं, यह परीक्षण करना वाकई मुश्किल हो जाता है। मैंने जो पढ़ा है, उससे मुझे निम्नलिखित करने में सक्षम होना चाहिए:

return new HttpResponseMessage<T>(objectInstance); 

हालांकि, ऐसा करने में सक्षम नहीं लगता है। क्या ऐसा इसलिए है क्योंकि मैं WebApi/.NET के पुराने संस्करण का उपयोग कर रहा हूं?


एक तरफ ध्यान दें पर, मैंने पाया है कि आप संभावित रूप से एक प्रतिक्रिया के रूप में निम्नानुसार बना सकते हैं:

var response = new HttpResponseMessage(); 
response.Content = new ObjectContent(typeof(T), objectInstance, mediaTypeFormatter); 

मुझे क्या हैरान यही कारण है कि मैं यहाँ एक mediaTypeFormatter जोड़ने के लिए है। मैंने ग्लोबल.एक्सएक्स स्तर पर मीडिया टाइप फॉर्मेटर जोड़ा है।

धन्यवाद!

+0

आप फ़ॉर्मेटर पारित करने के लिए क्योंकि अन्यथा ObjectContent वैश्विक संग्रह है, जो परीक्षण के लिए कठिन हो जाएगा तक पहुँचने के लिए एक स्थिर सदस्य का उपयोग करने की आवश्यकता होगी है के बारे में अधिक पढ़ सकते हैं। –

+0

अनुरोध स्थैतिक नहीं है, यह एपीकंट्रोलर का एक उदाहरण सदस्य है। –

उत्तर

60

HttpResponseMessage<T> बीटा के बाद हटा दिया गया था। कि तुम क्यों फ़ॉर्मेटर निर्दिष्ट करें, या करने की आवश्यकता है - अभी, बजाय एक टाइप किया HttpResponseMessage की हम एक टाइप किया है ObjectContent

आप मैन्युअल रूप से उसके डिफ़ॉल्ट parameterless निर्माता का उपयोग कर HttpResponseMessage बनाते हैं, तो वहाँ कोई अनुरोध सामग्री बातचीत प्रदर्शन करने के लिए उपलब्ध संदर्भ है हाथ से सामग्री बातचीत।

मैं समझता हूँ कि आप ऐसा नहीं करना चाहते हैं - तो बजाय इसका उपयोग:

HttpResponseMessage response = Request.CreateResponse<MyObject>(HttpStatusCode.OK, objInstance); 

उस अनुरोध के खिलाफ प्रदर्शन किया सामग्री बातचीत पर निर्भर प्रतिक्रिया संदेश पैदा करेगा।

अंत में, आप सामग्री बातचीत यहाँ On this link

+4

मुझे HttpResponseMessage याद आती है, मुझे लगता है कि यह एक बेहतर एपीआई था, लेकिन Request.CreateResponse ठीक काम करता है। – Hugo

+3

याद रखें कि 'HttpResponseMessage' का उपयोग करने वाले किसी भी नियंत्रक विधि को यूनिट-टेस्ट के लिए बहुत मुश्किल है, इसलिए यदि आप कर सकते हैं तो इसका उपयोग करना टालना सबसे अच्छा है। –

+7

@ रॉयडिक्टस मैं उत्सुक हूं कि यह इकाई परीक्षण को मुश्किल क्यों बनाता है, क्या आप कृपया विस्तृत कर सकते हैं? –