मुझे JSON का उपयोग करते समय ओडाटा सेवा में पोस्ट करते समय 'त्रुटि 415: असमर्थित मीडिया प्रकार' मिल रहा है।415 असमर्थित मीडिया प्रकार - रोशनी में ओडीटा सेवा के लिए पोस्ट जेसन 2012
इस लंबी पोस्ट के नीचे समाधान।
मैं जेएसओएन का उपयोग कर प्राप्त कर सकता हूं लेकिन जैसे ही मैं कोशिश करता हूं और पोस्ट करता हूं, मुझे यह त्रुटि मिलती है।
मैं एक्सएमएल का उपयोग करके भी/पोस्ट कर सकता हूं हालांकि मुझे जेसन का उपयोग करने की आवश्यकता है।
मुझे लगता है कि यह त्रुटि मेरे हेडर में कुछ गड़बड़ कर रही है, मेरे अनुरोध निकाय के जेसन प्रारूप के नीचे जो गलत भी हो सकता है, मैंने कई बदलावों की कोशिश की है जिसके परिणामस्वरूप एक ही त्रुटि है।
मैं फिडलर का उपयोग करके डीबग करने का प्रयास कर रहा हूं और नीचे परिणाम हैं।
JSON पोस्ट
अनुरोध
POST http://scdb38:8888/bi.test/applicationdata.svc/Sharks HTTP/1.1
User-Agent: Fiddler
Host: scdb38:8888
Content-Length: 91
Accept: application/json;odata=verbose;
Content-Type: application/json;
{
"d":[
{
"Name":"Great White ",
"Food":"Surfers"
}
]
}
रिस्पांस
HTTP/1.1 415 Unsupported Media Type
Cache-Control: private
Content-Length: 186
Content-Type: application/json;odata=verbose;charset=utf-8
Server: Microsoft-IIS/7.5
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 16 Oct 2013 06:20:10 GMT
{"error":{"code":"1","message":{"lang":"en-AU","value":"<?xml version=\"1.0\" encoding=\"utf-16\"?><ExceptionInfo><Message>Unsupported media type requested.</Message></ExceptionInfo>"}}}
JSON प्राप्त
अनुरोध हेडर
GET http://scdb38:8888/bi.test/applicationdata.svc/Sharks HTTP/1.1
User-Agent: Fiddler
Host: scdb38:8888
Content-Length: 0
Accept: application/json;odata=verbose;
Content-Type: application/json;
,210
रिस्पांस हैडर
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 591
Content-Type: application/json;odata=verbose;charset=utf-8
Server: Microsoft-IIS/7.5
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 16 Oct 2013 06:23:41 GMT
{"d":[{"__metadata":{"id":"http://scdb38:8888/BI.Test/ApplicationData.svc/Sharks(1)","uri":"http://scdb38:8888/BI.Test/ApplicationData.svc/Sharks(1)","etag":"W/\"X'00000000000007E4'\"","type":"LightSwitchApplication.Shark"},"Id":1,"RowVersion":"AAAAAAAAB+Q=","Name":"Tiger Shark","Food":"Penguins"},{"__metadata":{"id":"http://scdb38:8888/BI.Test/ApplicationData.svc/Sharks(2)","uri":"http://scdb38:8888/BI.Test/ApplicationData.svc/Sharks(2)","etag":"W/\"X'00000000000007E5'\"","type":"LightSwitchApplication.Shark"},"Id":2,"RowVersion":"AAAAAAAAB+U=","Name":"Grey Nurse","Food":"Lettuce"}]}
मैं understany नहीं क्यों मीडिया प्रकार पोस्ट के लिए असमर्थित होगा जब प्राप्त ठीक काम करता है है। मुझे एहसास है कि मैं DataServiceVersion का उपयोग कर रहा हूं: 1.0 और अपग्रेडिंग को देखा है लेकिन मैं लाइटस्विच 2012 का उपयोग कर रहा हूं और लाइटस्विच ऐप को तोड़ने के बिना नए संस्करण को संदर्भित करने में समस्याएं हैं। मुझे लगता है कि लाइटस्विच 2013 नए संस्करण (?) का उपयोग करता है, हालांकि मेरे लिए अपग्रेड करने से नई (गैर तकनीकी) चुनौतियां खुलती हैं। मुझे लगता है कि मैं cirlces में चारों ओर जा रहा हूं और यह मेरा आखिरी उपाय है और एक सहयोगी से बात करने के बाद मेरा एकमात्र अन्य विकल्प डेटाबेस में डेटा मॉडल बनाना और इस पर ओडाटा सेवा बनाना है।
---- अद्यतन ----
मैं के बाद से जेन एस द्वारा प्रदान की दोनों फिक्स करने की कोशिश की है और अब त्रुटि प्राप्त है: 400 गलत अनुरोध।
= वर्बोज़
POST http://scdb38:8888/bi.test/applicationdata.svc/Sharks HTTP/1.1
Accept: application/json;odata=verbose;
Content-Type: application/json;odata=verbose;
Content-Length: 98
Host: scdb38:8888
{
"d":[
{
"Name":"Great White ",
"Food":"Surfers"
}
]
}
HTTP/1.1 400 Bad Request
Cache-Control: private
Content-Length: 201
Content-Type: application/json;odata=verbose;charset=utf-8
Server: Microsoft-IIS/7.5
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 16 Oct 2013 23:31:09 GMT
{"error":{"code":"1","message":{"lang":"en-AU","value":"<?xml version=\"1.0\" encoding=\"utf-16\"?><ExceptionInfo><Message>An error occurred while processing this request.</Message></ExceptionInfo>"}}}
OData का उपयोग DataServiceVersion का उपयोग करना: 1,0
POST http://scdb38:8888/bi.test/applicationdata.svc/Sharks HTTP/1.1
Accept: application/json;odata=verbose;
Content-Type: application/json;
Content-Length: 98
Host: scdb38:8888
DataServiceVersion: 1.0;
{
"d":[
{
"Name":"Great White ",
"Food":"Surfers"
}
]
}
HTTP/1.1 400 Bad Request
Cache-Control: private
Content-Length: 201
Content-Type: application/json;odata=verbose;charset=utf-8
Server: Microsoft-IIS/7.5
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 16 Oct 2013 23:31:09 GMT
{"error":{"code":"1","message":{"lang":"en-AU","value":"<?xml version=\"1.0\" encoding=\"utf-16\"?><ExceptionInfo><Message>An error occurred while processing this request.</Message></ExceptionInfo>"}}}
WebServiceVerion का उपयोग करना: 2,0
POST http://scdb38:8888/bi.test/applicationdata.svc/Sharks HTTP/1.1
Accept: application/json;odata=verbose;
Content-Type: application/json;
Content-Length: 98
Host: scdb38:8888
DataServiceVersion: 2.0;
{
"d":[
{
"Name":"Great White ",
"Food":"Surfers"
}
]
}
HTTP/1.1 400 Bad Request
Cache-Control: private
Content-Length: 201
Content-Type: application/json;odata=verbose;charset=utf-8
Server: Microsoft-IIS/7.5
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 16 Oct 2013 23:38:23 GMT
{"error":{"code":"1","message":{"lang":"en-AU","value":"<?xml version=\"1.0\" encoding=\"utf-16\"?><ExceptionInfo><Message>An error occurred while processing this request.</Message></ExceptionInfo>"}}}
मैं इस को हल करने के साथ प्रगति और इसके बारे में सिर्फ एक मामला है हूँ जेसन अनुरोध निकाय गलत तरीके से संरचित किया जा रहा है? मैंने सफलता के बिना कुछ विचलन की कोशिश की है, हालांकि एक्सएमएल के साथ पोस्टिंग काम कर रही है।
----- समाधान ------
जेन की मदद एक OData सेवा करने के लिए json प्रारूप का उपयोग कर पोस्टिंग के लिए धन्यवाद मेरे लिए काम कर रहा है।
POST http://scdb38:8888/bi.test/applicationdata.svc/Sharks HTTP/1.1
Accept: application/json;odata=verbose;
Content-Type: application/json;
Content-Length: 62
Host: scdb38:8888
DataServiceVersion: 1.0;
{
"Name":"Great White ",
"Food":"Surfers"
}
HTTP/1.1 201 Created
Cache-Control: no-cache
Content-Length: 298
Content-Type: application/json;odata=verbose;charset=utf-8
ETag: W/"X'00000000000007E7'"
Location: http://scdb38:8888/BI.Test/ApplicationData.svc/Sharks(4)
Server: Microsoft-IIS/7.5
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 17 Oct 2013 23:22:12 GMT
{"d":{"__metadata":{"id":"http://scdb38:8888/BI.Test/ApplicationData.svc/Sharks(4)","uri":"http://scdb38:8888/BI.Test/ApplicationData.svc/Sharks(4)","etag":"W/\"X'00000000000007E7'\"","type":"LightSwitchApplication.Shark"},"Id":4,"RowVersion":"AAAAAAAAB+c=","Name":"Great White ","Food":"Surfers"}}
जेन एस, यह सही समझ में आता है। मैंने उपरोक्त दोनों फिक्सेस की कोशिश की है और दोनों के परिणामस्वरूप एक त्रुटि 400: खराब अनुरोध। मुझे यकीन नहीं है कि यह प्रगति कर रहा है, क्या यह अब जेसन अनुरोध निकाय के प्रारूप के साथ एक समस्या हो सकती है जिसे मैं भेज रहा हूं? मैं उपर्युक्त पोस्ट में प्रतिक्रिया पाठ को आज़माकर रखूंगा। – PaddleFish
हां, यह प्रगति कर रहा है :)। JSON Verbose अनुरोध पेलोड में "डी" बाहरी तत्व नहीं होना चाहिए। यह केवल प्रतिक्रियाओं के लिए है। और मेरा मानना है कि आप एक समय में केवल एक तत्व पोस्ट कर सकते हैं, इसलिए आपके पास JSON अनुरोध में कोई सरणी नहीं होनी चाहिए। क्या आप लाइब्रेरी का उपयोग कर रहे हैं, या इन्हें हाथ से तैयार कर रहे हैं? यदि आप एक ऐसी भाषा का उपयोग कर रहे हैं जिसमें ओडाटा लाइब्रेरी है, तो मैं पेलोड को हाथ से तैयार करने के बजाय इसका उपयोग करने का सुझाव दूंगा। (लेकिन इस समय सभी भाषाओं में अच्छी पुस्तकालय नहीं हैं :(।) –
यह काम करता है! धन्यवाद आपकी सभी मदद के लिए जेन। मैंने इस पोस्ट पर ठोकर खाई गई किसी भी अन्य व्यक्ति के लिए अंतिम कार्य अनुरोध और प्रतिक्रिया पोस्ट की है। अगर मेरे पास अधिक प्रतिष्ठा थी मैं आपको एक अपवित्र दूंगा। – PaddleFish