Ich versuche, eine http DELETE Anfrage mit NSURLSession, aber es funktioniert nicht vollständig. Der Server löscht die Ressource, aber die NSURLSession-Methode dataTaskWithRequest: completionHandler: gibt einen Zeitüberschreitungsfehler zurück, nachdem auf das angegebene Zeitlimit gewartet wurde.Machen http http DELETE Anfrage mit NSURLSession
Ich benutze NSURLConnection nicht, weil es veraltet ist.
Von den zu verwendenden NSURLSession-Methoden habe ich dataTaskWithRequest gewählt, weil es der Methode, die ich für http GET verwende: dataTaskWithUrl: completionHandler, am ähnlichsten ist. Die Methoden, die mit "uploadTask" und "downloadTask" beginnen, scheinen für DELETE nicht geeignet zu sein, aber downloadTaskWithRequest: completionHandler: funktionierte auf die gleiche Weise wie die obige dataTask-Methode. Der Server hat die Ressource gelöscht, die Methode hat jedoch einen Zeitüberschreitungsfehler zurückgegeben. Hier
ist der Code:
+(void)httpDelete: (NSString*)url completionHandler: (void(^)(id, NSError*))complete
{
NSURLSessionConfiguration *urlSessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSMutableDictionary* dictionaryAdditionalHeaders = [[NSMutableDictionary alloc] init];
NSString* stringBearerToken = @"...";
NSString* stringApiKey = @"...";
[dictionaryAdditionalHeaders setObject:stringBearerToken forKey:@"Authorization"];
[dictionaryAdditionalHeaders setObject:stringApiKey forKey:@"x-api-key"];
[dictionaryAdditionalHeaders setObject:@"application/json" forKey:@"Content-Type"];
[dictionaryAdditionalHeaders setObject:@0 forKey:@"Content-Length"];
[urlSessionConfiguration setHTTPAdditionalHeaders: dictionaryAdditionalHeaders];
NSURLSession *urlSession = [NSURLSession sessionWithConfiguration: urlSessionConfiguration delegate:nil delegateQueue:[NSOperationQueue mainQueue]];
NSMutableURLRequest* mutableUrlRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5];
[mutableUrlRequest setHTTPMethod: @"DELETE"];
[[urlSession dataTaskWithRequest:mutableUrlRequest completionHandler: ^(NSData *data, NSURLResponse* response, NSError* error)
{
if(error != nil)
{
complete(response, error);
}
else
{
complete(response, nil);
}
}] resume];
}
Mit Postman, die DELETE-Aufruf kehrt mit einem 204 sofort.
Benutzt ich NSURLSession korrekt für eine Löschanforderung?
Timeout-Fehler ist ein Back-End-Problem. Wenn Sie keine Antwort erhalten oder den Fehlerblock nicht drücken, ist das Problem nie da! –