2013-03-25 13 views
6

के साथ वेबएपीआई में एक जटिल वस्तु के रूप में पाठ/सादा पोस्ट करना तो मैं सीओआरएस का उपयोग कर AJAX पोस्ट से सर्वर पर एक जटिल ऑब्जेक्ट पोस्ट करना (या PUT) करना चाहता हूं। दुर्भाग्यवश IE8 केवल CORS का उपयोग करते समय टेक्स्ट/सादा भेजने का समर्थन करता है और application/json नहीं।सीओआरएस

कस्टम पार्स टेक्स्ट/सादा सबमिशन में WebAPI में हैंडलर को लागू करने का कोई तरीका है।

जटिल वस्तु से मेरा मतलब है

public void POST([FromBody] MyCustomObject myResponse) 
{ 
    return null; 
} 

आम तौर पर मैं IE8 प्रतिबंधों के उचित रूप में निर्धारित हेडर के साथ कुछ JSON में लेकिन कारण जैसे ही आप शीर्ष लेख यह पहुँच से मना कर इतना होने की जरूरत है के साथ विफल सेट के रूप में पोस्ट करता हूँ पाठ/सादा तो मैं जो करने की योजना बना रहा हूं वह एक JSON स्ट्रिंग भेजता है लेकिन टेक्स्ट/सादा (बदसूरत मुझे पता है!) कहा जाता है लेकिन बेहतर विकल्प की कमी के लिए ...

उत्तर

8

अपने WebAPI आवेदन वास्तव में केवल JSON का उपयोग करता है, तो आप इस समाधान जहां यह हमेशा JSON के साथ प्रतिक्रिया और अनुरोध सामग्री प्रकार पर ध्यान नहीं देता इस्तेमाल कर सकते हैं:

How can I force asp.net webapi to always decode POST data as JSON

कि से, मैं इस समाधान का सुझाव देते हैं:

इस कोड Application_Start के लिए जोड़ा जा करने की जरूरत है या WebApiConfig.Register

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain")); 
config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter); 
config.Formatters.Remove(config.Formatters.XmlFormatter); 

यह बताता है जेसन फॉर्मेटर सादे पाठ सामग्री-प्रकार को स्वीकार करने के लिए, और फॉर्म और एक्सएमएल फॉर्मेटर्स को हटा देता है (हालांकि उन्हें हटाने की आवश्यकता नहीं हो सकती है)

+1

धन्यवाद। यह मेरे लिए काम करता है, और जब मैं पोस्ट, डिलीट और पुट करते हैं तो प्रीफलाइट को रोकने के लिए इसका उपयोग करता हूं। – JimiOr2

1

बदसूरत, लेकिन आप सामग्री को संशोधित करने का प्रयास कर सकते हैं एक संदेश हैंडलर में टेक्स्ट/सादा से एप्लिकेशन/जेसन से टाइप हेडर टाइप करें ताकि पैरामीटर बाइंडिंग जेसन फॉर्मेटर के साथ ठीक से हो।

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