2011-06-27 16 views
6

Używam ASIHttpRequest (w. 1.8-95) dla Iphone i chciałem utworzyć synchroniczne żądanie DELETE wraz z niektórymi danymi treści. Poszedłem w ten sposób:Metoda ASIHttpRequest DELETE z parametrami ciała

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

Chociaż zostało potwierdzone na stronie klienta poprzez

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

że metoda została poprawnie ustawiona na „DELETE” po stronie serwera jest „POST” wniosek został przyjęty !

Jeżeli po prostu pominąć

[request appendPostData: ..] 

prawidłowe DELETE zostanie odebrany po stronie serwera)

Więc co jest nie tak z moją prośbę? Dzięki za wszelkie rozwiązania.

Pozdrowienia

creator_11

Odpowiedz

7

Przeszukiwanie grupę asihttprequest (http://groups.google.com/group/asihttprequest/search?group=asihttprequest&q=delete&qt_g=Search+this+group) pojawia się kilka istotnych wiadomości w tym sugerowane rozwiązania:

wezwanie buildPostBody na żądanie po tym, jak wypełniane ciało, ale przed ustawieniem metody żądania.

+0

dzięki za twoją podpowiedź również wysłałeś do mnie w tej grupie google. Jak już wspomniano, sugerowane rozwiązanie z dodatkowym stwierdzeniem "buildPostBody" działało poprawnie, a żądanie DELETE zakończyło się powodzeniem. dzięki. –

2

czasowników HTTP i zwyczaje nie mogą po prostu być mieszane i dopasowywane. OK, mogą, ale musielibyście zmienić serwer, aby obsługiwać niestandardowe użycie. DELETE should use the URI of the resource do usunięcia i to wszystko. Brak parametrów POST, brak załącznika.

Jeśli naprawdę chcesz wysłać trochę dodatkowych danych wraz z kasowania, można ustawić go w nagłówkach żądania (addRequestHeader:value:), a po stronie serwera wyciągnąć te informacje na zewnątrz, ale tego uniknąć, jeśli możesz. Powodem jest, że DELETE powinno usuwać jedną "rzecz", do której odwołuje się jej URI. Jeśli logika biznesowa aplikacji serwera mówi, że usuwanie powinno wpływać na niektóre inne obiekty (np. Usuwanie kaskadowe), aplikacja kliencka nie powinna o tym wiedzieć.

Czy możesz wyjaśnić, co próbujesz POST podczas wykonywania DELETE, może mogę zaoferować alternatywne rozwiązanie.

+0

jak wspomniano powyżej rozwiązania z dodatkowym „buildPostBody” oświadczenie działało. Zgadzam się, że z punktu widzenia czystej usługi REST masz rację, a usuwany zasób powinien być określony w identyfikatorze URI. Ale o ile mi wiadomo, specyfikacja protokołu http. NIE zabraniaj żadnych danych pocztowych razem z żądaniem DELETE. ponieważ nasz serwer działa. nie opiera się na "czystym" REST, wymaga jedynie niektórych specyfikatorów zasobów jako danych pocztowych, które można teraz przesłać. Niemniej jednak omówię ten punkt z osobami odpowiedzialnymi za aplikację serwera. tylko po to, by ulepszyć projekt. Dziękuję Ci. C. –