我試圖使用NSURLSession提出一個http DELETE請求,但它並不完全正常工作。服務器刪除資源,但NSURLSession方法dataTaskWithRequest:completionHandler:在等待指定的超時後返回超時錯誤。使用NSURLSession提出http DELETE請求
我不使用NSURLConnection,因爲它已被棄用。
在使用的NSURLSession方法中,我選擇了dataTaskWithRequest,因爲它與我用於http GET的方法最相似:dataTaskWithUrl:completionHandler。以「uploadTask」和「downloadTask」開頭的方法似乎不適用於DELETE,但downloadTaskWithRequest:completionHandler:'工作'的方式與上面的dataTask方法相同。服務器刪除了該資源,但該方法返回了超時錯誤。
下面是代碼:
+(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];
}
使用郵差,刪除調用返回立即以204。
我是否正確使用NSURLSession進行刪除請求?
超時錯誤是一個後端問題。除非您得到迴應或者擊中失敗區塊,否則我們永遠不會遇到問題! –