ios - 使用 NSURLSession 发出 http DELETE 请求

标签 ios objective-c ios9 nsurlsession

我正在尝试使用 NSURLSession 发出一个 http DELETE 请求,但它并没有完全起作用。服务器删除资源,但NSURLSession方法dataTaskWithRequest:completionHandler:WAITING指定超时后返回超时错误。

我没有使用 NSURLConnection,因为它已被弃用。

在要使用的 NSURLSession 方法中,我选择了 dataTaskWithRequest,因为它与我用于 http GET 的方法最相似:dataTaskWithUrl:completionHandler。以“uploadTask”和“downloadTask”开头的方法似乎不适合 DELETE,但 downloadTaskWithRequest: completionHandler: 'worked' 与上面的 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];
}

使用 Postman,DELETE 调用立即返回 204。

我是否正确使用 NSURLSession 来处理删除请求?

最佳答案

事实证明,Amazon API Gateway 错误地发送了带有 204 响应的 Content-Length header 。根据 this AWS forum,他们于 2016 年 3 月 21 日将该问题添加到积压工作中.当我将 NSMutableURLRequest 的超时间隔增加到荒谬的 300 秒时,dataTaskWithRequest 方法返回一个真正的响应而不是超时。

关于ios - 使用 NSURLSession 发出 http DELETE 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39518639/

相关文章:

ios - 为什么标签上的文本不会出现在实际设备上,但会出现在模拟器中? (Xcode)

iphone - "Reachability.h"“Reachability.m 在添加它们时给出 Apple mach-o 链接器错误

ios - 无法获取地点 - REQUEST_DENIED

ios - 为什么使用 CoreText 渲染文本布局,文本可以显示在 1px 宽度的路径中?

ios - 如何在 iOS 中获取 UIView 的 super View 的 UIViewController?

objective-c - 以编程方式更改 iPhone 5 的 UIView 布局

objective-c - 我是否应该在对象指针上使用 __block 说明符,即使它在没有它的情况下也能工作?

swift - 我的 Swift 系统声音没有播放

iOs - 无法识别的选择器发送到 TextAction 上的实例

ios - IOS存储的问题