35

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

Objective-C 或Monotouch .NET 回答好。

4

4 回答 4

88

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

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
   NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
   int code = [httpResponse statusCode];
}
于 2011-08-02T21:24:48.197 回答
11
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)。

于 2011-08-02T21:24:58.010 回答
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);
   }
}
于 2011-08-02T22:17:20.027 回答
1

看看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];
}
于 2011-08-02T21:27:44.807 回答