2014-09-19 3 views
7

लिए समर्थित नहीं है मैं इस वर्ग है:वेब एपीआई से 2 JSON पोस्टिंग त्रुटि: अनुरोध इकाई के मीडिया प्रकार 'पाठ/सादे' इस संसाधन

public class MyClass 
{ 
    public MyClass() { Secret = "Don't tell me"; } 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string Description { get; set; } 
    private string Secret { get; set; } 
} 

इस वेब एपीआई विधि:

मैंने एक्सएमएल के बजाय जेएसओएन वापस करने के लिए वेब एपीआई सेट की है और मैंने डिफ़ॉल्ट कॉन्फ़िगरेशन में कोई अन्य बदलाव नहीं किया है। मैं फ़ायरफ़ॉक्स के RESTClient एक्सटेंशन के साथ इस विधि का परीक्षण करने की कोशिश कर रहा हूं। यहाँ मेरा अनुरोध है:

POST localhost:XXXX/api/fixture 
Content-Type: application/json 
Accept: application/json 
Content-Length: 60 

{ 
value : { "Name":"Cosby","Age":"13","Description":"OK" } 
} 

हालांकि मैं यह त्रुटि हो रही है:

{ "message": "। अनुरोध इकाई के मीडिया प्रकार 'पाठ/सादे' इस संसाधन के लिए समर्थित नहीं है" , "अपवाद मैसेज": "मीडिया प्रकार 'टेक्स्ट/सादा' के साथ सामग्री से 'MyClass' प्रकार की वस्तु को पढ़ने के लिए कोई MediaTypeFormatter उपलब्ध नहीं है।", "अपवाद टाइप": "System.Net.Http.UnsupportedMediaTypeException", "StackTrace": "System.Net.Http.HttpContentExtensions.ReadAsAsync [T] (HttpContent सामग्री, प्रकार का प्रकार, IENumerable 1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable 1 स्वरूपक, IFormatterLogger formatterLogger, रद्दीकरण टोकन रद्दीकरण टोकन) \ r \ n System.Web.Http.ModelBind पर ing.FormatterParameterBinding.ReadContentAsync (HttpRequestMessage अनुरोध, प्रकार प्रकार, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken) "}

संपादित करें:

मुझे समझ नहीं आता, क्योंकि ऐसा लगता है कि विधि नहीं है यहां तक ​​कि बुलाया अगर मैं डीबग करता हूं, तो मुझे लगता है कि निर्माता को बुलाया जाता है और फिर कोई अन्य विधि नहीं कहा जाता है। कोई अपवाद नहीं उठाया गया है।

मैं इस मुद्दे पर बहुत समय से रहा हूं। मुझे पता चला है कि यह समस्या आमतौर पर तब होती है जब सामग्री-प्रकार ठीक से सेट नहीं होता है लेकिन यह मेरा मामला प्रतीत नहीं होता है क्योंकि अनुरोध संसाधित नहीं होता है।

कोई विचार?

धन्यवाद

+0

आपको अपने प्रश्न में अपने पोर्ट नंबर को अबाधित करने की आवश्यकता नहीं है। हम नहीं जानते कि 'लोकलहोस्ट' कहां है। वैसे भी, क्या आप सकारात्मक हैं कि आपका पोस्ट उस पोस्ट संदेश के साथ होता है? अपवाद यह ध्वनि बनाता है जैसे आप 'एप्लिकेशन/जेसन' की बजाय' टेक्स्ट/सादे' 'की सामग्री प्रकार पोस्ट कर रहे हैं। – mason

उत्तर

9

आप बल्कि एक हेडर के रूप में की तुलना में, शरीर में application/json की सामग्री प्रकार भेज रहे थे। तो आपका POST अनुरोध पाठ/सादे में डिफ़ॉल्ट था। हेडर में प्रवेश करने के लिए RestClient एक्सटेंशन में एक अलग स्थान है।

यदि आपके पास तार पर क्या भेजा जा रहा है, इसके बारे में कोई सवाल है, तो अपने ब्राउज़र के डेवलपर टूल में नेटवर्क टैब देखें, या नेटवर्क ट्रैफ़िक देखने के लिए Fiddler जैसे टूल का उपयोग करें।

1

शायद आप अपने HTTP अनुरोध हैडर में सामग्री निम्नलिखित जोड़ने की जरूरत:

Content-Type: application/json 
3

उपयोग डाकिया अपने वेब एपीआई परीक्षण करने के लिए, कॉन्फ़िगर यह हैडर के लिए: सामग्री-प्रकार: आवेदन/json के बाद से यह एक POST अनुरोध है, आपको कच्चे जेसन डेटा डालना होगा।

9

POSTMAN के अंदर, आपको केवल सेटिंग/जेसन में सेटिंग बदलने की आवश्यकता है। नीचे छवि का संदर्भ लें।

application/json

0

मैं जब मैं एक नियंत्रक कि पैरामीटर में दो अलग अलग मॉडल था इस समस्या को मिला है। पोस्ट विधि उस मॉडल का उपयोग कर रही थी जिसे बिल्डर में निर्दिष्ट नहीं किया गया था। एंटीटीसेट जिस तरह से मैंने हल किया है वह अलग पढ़ने और लिखने वाले नियंत्रकों को बनाना है। यह सीक्यूआरएस की तर्ज पर है। हालांकि एपीआई चश्मा अधिक गन्दा हो गया .. स्वैगर के लिए भगवान का शुक्र है!

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