是否可以重试ASIHTTPRequest?

Rn2*_*222 4 asihttprequest ios

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

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

loginAndRetryRequest:将执行另一个ASIHTTPRequest登录,当它完成时,它将从它的CompletionBlock再次启动原始请求(假设这可能以某种方式)?

ser*_*gio 5

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

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

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

  • 复制请求有效,但仅当我使用setDidFinishSelector而不是setCompletionBlock时.如果我使用一个块,它永远不会在副本中被调用.ASIHTTPRequest的copyWithZone似乎没有复制完成块,当我尝试自己完成时它也不起作用.也许这是一个错误?至少我现在有办法做到这一点.谢谢! (2认同)