2011-06-27 24 views
6

मैं आईफोन के लिए ASIHttpRequest (v। 1.8-95) का उपयोग करता हूं और कुछ बॉडी डेटा के साथ एक सिंक्रोनस डेलेटी अनुरोध बनाना चाहता था।शरीर पैरामीटर के साथ ASIHttpRequest DELETE विधि

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:nsUrl]; 
[request appendPostData:[@"some body params" dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setRequestMethod:@"DELETE"]; 
[request startSynchronous]; 

हालांकि मैं के माध्यम से

NSLog(@"request: method:%@", request.requestMethod); 

कि विधि सही ढंग से सर्वर साइड "पोस्ट करें" अनुरोध प्राप्त हुआ था पर "हटाएँ" करने के लिए स्थापित किया गया था क्लाइंट पक्ष पर पुष्टि की गई: मैं इस तरह से चला गया !

तो मैं बस छोड़

[request appendPostData: ..] 

एक सही हटाएँ सर्वर साइड पर प्राप्त होता है)

तो क्या मेरे अनुरोध के साथ गलत क्या है? किसी भी समाधान के लिए धन्यवाद।

सादर

creator_11

उत्तर

7

asihttprequest समूह (http://groups.google.com/group/asihttprequest/search?group=asihttprequest&q=delete&qt_g=Search+this+group) सर्च कर रहे हैं एक सुझाव वैकल्पिक हल सहित कुछ प्रासंगिक पदों बदल जाता है:

कॉल buildPostBody आपके अनुरोध के बाद आप शरीर आबादी है, उन पर है, लेकिन इससे पहले कि आप अनुरोध विधि निर्धारित किया है।

+0

आपके संकेत के लिए धन्यवाद, आपने मुझे इस Google समूह में भी भेजा है। जैसा कि बताया गया है कि अतिरिक्त "buildPostBody" कथन के साथ सुझाए गए समाधान ने ठीक काम किया है और DELETE अनुरोध अब सफल हुआ है। धन्यवाद। –

2

HTTP क्रिया और उपयोगों के बस नहीं मिलाया जा सकता है और मेल नहीं खाते। ठीक है, वे कर सकते हैं, लेकिन आपको अपने गैर-मानक उपयोग का समर्थन करने के लिए सर्वर को बदलना होगा। DELETE should use the URI of the resource हटाए जाने के लिए, और यह है कि। कोई पोस्ट पैराम, कोई अनुलग्नक नहीं।

तो वास्तव में आप हटाना के साथ थोड़ा अतिरिक्त डेटा भेजने के लिए चाहते हैं, आप अनुरोध (addRequestHeader:value:) के शीर्ष लेख में सेट कर सकते हैं, और सर्वर साइड कि जानकारी बाहर खींच, लेकिन से बचने कि यदि आप कर सकते हैं। इसका कारण यह है कि DELETE को इसके यूआरआई द्वारा संदर्भित एक 'चीज़' को हटाना चाहिए। यदि सर्वर अनुप्रयोग का व्यावसायिक तर्क कहता है कि हटाएं किसी अन्य ऑब्जेक्ट को प्रभावित करना चाहिए (उदाहरण के लिए कैस्केडिंग डिलीट), क्लाइंट एप्लिकेशन को इसके बारे में पता नहीं होना चाहिए।

क्या आप डिलीट करते समय पोस्ट करने का प्रयास कर रहे हैं, शायद मैं एक वैकल्पिक समाधान प्रदान कर सकता हूं।

+0

जैसा कि अतिरिक्त "buildPostBody" कथन के समाधान के ऊपर उल्लिखित है, ठीक काम करता है। मैं मानता हूं कि शुद्ध शुद्ध दृष्टिकोण से आप सही हैं और हटाए जाने वाले संसाधन को यूआरआई के भीतर निर्दिष्ट किया जाना चाहिए। लेकिन जहां तक ​​मुझे पता है http प्रोटोकॉल spec करता है। एक डेली अनुरोध के साथ किसी भी पोस्ट डेटा को एक साथ मना नहीं है। हमारे सर्वर सेब के बाद से। "शुद्ध" आरईएसटी पर भरोसा नहीं करता है, इसके लिए कुछ संसाधन विनिर्देशकों को पोस्ट डेटा के रूप में आवश्यकता होती है जो अब उन्हें भेजना संभव है। फिर भी मैं इस बिंदु पर सर्वर सेब के लिए ज़िम्मेदार लोगों के साथ चर्चा करूंगा। बस डिजाइन में सुधार करने के लिए। धन्यवाद। सी –

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