【问题标题】:Customize requestFinished, requestFailed conditions for ASIHTTPRequest为 ASIHTTPRequest 自定义 requestFinished、requestFailed 条件
【发布时间】:2012-03-09 11:55:09
【问题描述】:

我想自定义ASIHTTPRequest,以便在触发requestFinished 时更加挑剔。特别是,我希望在状态码为200 时调用requestFinished。除此之外,对于所有其他状态代码或网络级故障,我想要一个requestFailed。有没有办法干净地覆盖默认功能,或者我是否通过尝试修改ASIHTTPRequest 来打开一罐蠕虫?如果有干净的方法,它在哪里?

【问题讨论】:

    标签: iphone objective-c nsurlconnection asihttprequest nsurlrequest


    【解决方案1】:

    尝试在ASIHTTPRequest.m这里添加一段代码

    - (void)reportFinished
    {
        if (self.responseStatusCode !=200){
        //this way, you can get error message you want in requestDidFailed:.
        return [self failWithError:[NSError errorWithDomain:@"Failed" code:ASIConnectionFailureErrorType userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"Failed to get connection",NSLocalizedDescriptionKey,nil]]];
        }
    
         ... 
         ... 
    }
    

    【讨论】:

    • 在这种情况下,即使您不需要它,您也会收到整个响应正文。
    • 也许你是对的。但是由于您不需要它,所以这样做没有害处。而且,如果发生失败,您可以在该方法中覆盖 responseString
    【解决方案2】:

    子类 ASIHTTPRequest 并提供您自己的 reportFinished 方法,该方法执行现有方法的操作,除了它应该首先检查 responseStatusCode,如果它不是 200 则调用失败委托。

    【讨论】:

      【解决方案3】:

      你应该实现 ASIHTTPRequestDelegate 的request:didReceiveResponseHeaders: 方法,headers 字典应该包含响应代码。

      如果该值不合适,请致电[request failWithError:error]error 例如可以是ASIRequestCancelledError

      在这种情况下,您不需要接收所有响应正文。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 2018-12-24
        相关资源
        最近更新 更多