【问题标题】:Can an ASIHTTPRequest be retried?可以重试 ASIHTTPRequest 吗?
【发布时间】:2011-05-19 17:00:46
【问题描述】:

有没有办法重试 ASIHTTPRequest?我在 REST 服务中使用自定义身份验证而不是基本 HTTP 身份验证,如果会话已过期,我想重试请求。对请求再次调用 startAsynchronous 会导致异常。我想做这样的事情:

[request setCompletionBlock:^{
        if ([request responseStatusCode] == 500)
        {
            // try to login again in case token expired
            [server loginAndRetryRequest:request];
        } else {
            // parse response
        }
    }];

loginAndRetryRequest: 将执行另一个 ASIHTTPRequest 来登录,完成后它将从 CompletionBlock 再次启动原始请求(假设这是可能的)?

【问题讨论】:

    标签: ios asihttprequest


    【解决方案1】:

    应该可以复制请求,然后在副本上再次执行-startAsynchronous

    在 1.5 版中添加了对 NSCopying 协议的支持,其中还包括在超时时自动重试(选择器 -setNumberOfTimesToRetryOnTimeout:

    另一种选择是检查他们的源代码,看看在超时的情况下如何自动重试,但是复制和重新发出请求应该可以工作(这就是首先添加对 NSCopying 支持的原因)。

    【讨论】:

    • 复制请求有效,但前提是我使用 setDidFinishSelector 而不是 setCompletionBlock。如果我使用一个块,它永远不会在副本中被调用。 ASIHTTPRequest 的 copyWithZone 似乎没有复制完成块,当我自己尝试做它时它也不起作用。也许这是一个错误?至少我现在有办法做到。谢谢!
    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多