POST में वेब API सेवा में json भेजने में त्रुटि


90

मैं वेब API का उपयोग करके एक वेब सेवा बना रहा हूं। मैंने एक साधारण वर्ग लागू किया

public class ActivityResult
{
    public String code;
    public int indexValue;
    public int primaryCodeReference;
}

और फिर मैंने अपने नियंत्रक के अंदर लागू किया है

[HttpPost]
public HttpResponseMessage Post(ActivityResult ar)
{
    return new HttpResponseMessage(HttpStatusCode.OK);
}

लेकिन जब मैं POST में पासिंग एपीआई को फाइल जसन कहता हूं:

{"code":"XXX-542","indexValue":"3","primaryCodeReference":"7"}

मुझे निम्न त्रुटि संदेश प्राप्त हुआ:

{
    "Message": "The request entity's media type 'text/plain' is not supported for this resource.",
    "ExceptionMessage": "No MediaTypeFormatter is available to read an object of type 'ActivityResult' from content with media type 'text/plain'.",
    "ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",
    "StackTrace": "   in System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
}

मैं क्या गलत कर रहा हूं?


9
आपको क्लाइंट से स्वीकार किए जाने वाले पेलोड के लिए "एप्लिकेशन / जोंस" का हेडर जोड़ना होगा।
एडम जुकरमान

मैंने अपने HTTP अनुरोध में हेडर को सही ढंग से निपटाया है। हालाँकि समस्या सर्वर-साइड लगती है: dropbox.com/s/xlidnnybs8v6d0u/Cattura.JPG
GVillani82

4
ऐसा लगता है कि आप केवल Acceptहेडर को ही सेट कर रहे हैं application/json। आपको Content-Typeहेडर को भी सेट करना होगा application/json
ब्रायन रोजर्स

जवाबों:


186

HTTP अनुरोध में आपको सामग्री-प्रकार सेट करने की आवश्यकता है: Content-Type: application/json

इसलिए यदि आप फ़िडलर क्लाइंट का उपयोग कर रहे हैं तो Content-Type: application/jsonअनुरोध हेडर में जोड़ें


2
  1. आपको शीर्ष लेख संपत्ति जोड़ना होगा Content-Type:application/json
  2. जब आप किसी भी POST अनुरोध विधि इनपुट पैरामीटर को परिभाषित करते हैं [FromBody], जिसे एनोटेट किया जाना चाहिए , जैसे :

    [HttpPost]
    public HttpResponseMessage Post([FromBody]ActivityResult ar)
    {
      return new HttpResponseMessage(HttpStatusCode.OK);
    }
  3. किसी भी JSON इनपुट डेटा को कच्चा डेटा होना चाहिए ।


1

एक और टिप ... जहां "सामग्री-प्रकार: एप्लिकेशन / जोंस" जोड़ने के लिए ... संगीतकार / पार्स किए गए टैब पर टेक्स्टबॉक्स फ़ील्ड में। वहाँ पहले से ही 3 लाइनें भरी हुई हैं, इसलिए मैंने इस सामग्री-प्रकार को 4 वीं पंक्ति के रूप में जोड़ा। जिसने पोस्ट को काम बना दिया।


0

कृपया जांचें कि क्या आप POSTइसके बजाय विधि से गुजर रहे हैं GET। यदि ऐसा है तो आपको वही त्रुटि मिलेगी जो आपने ऊपर पोस्ट की थी।

$http({               
 method: 'GET',

इस संसाधन के लिए अनुरोध इकाई का मीडिया प्रकार 'टेक्स्ट / प्लेन' समर्थित नहीं है।


1
यह सवाल विशेष रूप से http POST के बारे में है, वह सर्वर से डेटा भेजने का अनुरोध नहीं कर रहा है।
युद्ध

0

मेरे पास मेरी सभी सेटिंग्स स्वीकृत उत्तर में शामिल थीं। मेरे पास समस्या यह थी कि मैं एंटिटी फ्रेमवर्क इकाई प्रकार "टास्क" को अपडेट करने की कोशिश कर रहा था जैसे:

public IHttpActionResult Post(Task task)

मेरे लिए अपनी इकाई "DTOTask" बनाने के लिए क्या काम किया गया था:

public IHttpActionResult Post(DTOTask task)

0

इसे Content-Type:application/jsonवेब एपीआई अनुरोध हेडर सेक्शन में शामिल करने की आवश्यकता होती है जब किसी भी सामग्री का उल्लेख नहीं किया जाता है तो डिफ़ॉल्ट रूप से यह Content-Type:text/plainअनुरोध करने के लिए पारित हो जाता है।

पोस्टमैन टूल पर एपीआई का परीक्षण करने का सबसे अच्छा तरीका।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.