【问题标题】:NSUrlConnectionDelegate - Getting http status codesNSUrlConnection Delegate - 获取 http 状态码
【发布时间】:2011-10-18 15:01:24
【问题描述】:

在 iOS 中,如何接收来自 Web 服务器的响应的 http 状态代码(404,500 200 等)。我假设它在 NSUrlConnectionDelegate 中。

Objective-C 或 Monotouch .NET 答案正常。

【问题讨论】:

标签: iphone ios xamarin.ios http-response-codes nsurlconnectiondelegate


【解决方案1】:

是的,您可以在委托方法 -didRecieveResponse 中获取状态码:

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
   NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
   int code = [httpResponse statusCode];
}

【讨论】:

  • 请注意,尽管使用点表示法,但 statusCode 不是属性。
  • @albertamg,哎呀……谢谢,将纠正这一点以避免混淆
  • 我意识到这很明显,但为了完整起见,我会注意它:在任何其他地方,您会收到 NSURLResponse 以响应 HTTP 请求(例如 @ 的完成处理程序987654323@,您可以以完全相同的方式将NSURLResponse 转换为NSHTTPURLResponse
【解决方案2】:
NSHTTPURLResponse* urlResponse = nil;
NSError *error = nil;
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

aSynchronous 请求也应该有办法获取 NSHTTPURLResponse..

你会得到这样的状态码:

int statusCode = [urlResponse statusCode];
int errorCode = error.code;

在一些经常使用的错误代码(如 404)的情况下,它会被放入错误中,但代码不同(401 将是 -1012)。

【讨论】:

  • 不需要分配错误 - 只需检查返回时错误是否不为空 - 如果不是,您应该有错误代码
  • 谢谢大家,这对我有帮助。感谢 401,我试图捕获的错误。如你所说,error.code = -1012。
【解决方案3】:

以下是针对 C# 用户在 MonoTouch for .NET 中的操作方法。这在 NSUrlConnectionDelegate 中。

public override void ReceivedResponse (NSUrlConnection connection, NSUrlResponse response)
{
  if (response is NSHttpUrlResponse)
  {
    var r = response as NSHttpUrlResponse;
    Console.WriteLine (r.StatusCode);
   }
}

【讨论】:

    【解决方案4】:

    看看this other stackoverflow question,看起来你可以在- (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse *)response委托方法中处理http状态码:

    - (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse*)response 
    {
        if ([response isKindOfClass: [NSHTTPURLResponse class]])
            statusCode = [(NSHTTPURLResponse*) response statusCode];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2013-12-06
      • 1970-01-01
      相关资源
      最近更新 更多