Können iOS-Geräte senden PUT-Anfragen an den Rails-apps?
Wir haben versucht mehrere Male zu senden update-PUT-Anfragen zu unseren Rails server und wir halten den Empfang 404 "die Seite, Die Sie gesucht haben existiert nicht"
Unsere update-Methode ist sehr einfach (nahezu generische Schienen).
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
Ende
Wenn ich mit CURL von der Kommandozeile zum testen der update-Methode, es funktioniert Prima. Aber, wenn ich versuche, die gleichen Methoden in objective-c, es führt immer zu einem 404-Fehler.
Also meine Frage ist: können iOS-Geräte senden, STELLEN Anfragen an Server mittels NSURLConnection oder ist das nicht implementiert?
UPDATE::
Das nicht aktualisieren der Datenbank
NSString *dataString = @"user[first_name]=bob";
NSData *postBodyData = [NSData dataWithBytes: [dataString UTF8String] length:[dataString length]];
NSString *urlString = [NSString stringWithFormat:@"example.com/users/1.json"];
NSURL *fullURL = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:fullURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20];
[request setHTTPMethod: @"PUT"];
[request setHTTPBody:postBodyData];
self.todoConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
receivedData = [NSMutableData data];
Dies aktualisiert die Datenbank
NSString *urlString = [NSString stringWithFormat:@"example.com/users/1.json?user[first_name]=bob"];
NSURL *fullURL = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:fullURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20];
[request setHTTPMethod: @"PUT"];
self.todoConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
receivedData = [NSMutableData data];
- Posting Ruby-code, wenn Sie Ihre Frage über das iOS-Unterstützung wahrscheinlich nicht tun Sie etwas gutes. Wenn Sie stattdessen posten Sie Ihre Objective-C-code, können wir schauen und sehen, wenn Sie das setzen der HTTP-Methode korrekt (wie David V unten dargestellt).
- Ja, tut mir Leid, dass. Ich Schreibe die Schienen zu Ende, und einem anderen Entwickler geschrieben hatte, die in objective-c, und ich hatte keinen Zugang zu seinem code. Es ist bis jetzt.
- Ich Frage mich, ob es etwas mit der Tatsache zu tun, dass Sie nicht entkommen die '[' und'] ' - Zeichen. Versuchen Sie, die Einstellung der HTTP-body mit Daten, die sich aus der Zeichenkette @"user%5Bfirst_name%5D=brian".
- Ich Verschwendete fast einen Tag herauszufinden dieses heraus.
- Das klingt wie ein Sicherheits-Loch. Wie würden Sie die Authentifizierung der PUT-Anfrage?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie NSMutableURLRequest und legen Sie die HTTP-Methode:
Geben Sie die Zeichenfolge
@"PUT"
.Hier ist, wie können Sie eine NSURLConnection von einer solchen Anfrage.
Eigentlich @akshay1188 hat eine brauchbare Lösung, aber ich denke die elegantere Methode ist das hinzufügen der "application/x-www-form-urlencoded" content-type der Anfrage:
Festlegen der HTTP-Methode geben, wie @"POST"
Und fügen Sie einen parameter an die request-body als:
@"PUT" für den key @"_method"
Sollte es funktionieren.