在iOS中,如何从Web服务器响应中接收HTTP状态码(404、500、200等)?我假设它在NSUrlConnectionDelegate中。
Objective-C或Monotouch .NET的答案都可以。
Objective-C或Monotouch .NET的答案都可以。
是的,你可以在代理方法-didRecieveResponse:中获取状态码。
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
int code = [httpResponse statusCode];
}
NSURLResponse
(例如sendAsynchronousRequest:queue:completionHandler:
的完成处理程序),您可以以完全相同的方式将NSURLResponse
转换为NSHTTPURLResponse
。 - Mark AmeryNSHTTPURLResponse* urlResponse = nil;
NSError *error = nil;
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
请求还应该有一种获取NSHTTPURLResponse的方式...
您可以像这样获取状态码:
int statusCode = [urlResponse statusCode];
int errorCode = error.code;
对于一些经常使用的错误码(如404),它们会出现在错误中,但是会有不同的代码表示(401将变为-1012)。
以下是针对使用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);
}
}
从这个其他的stackoverflow问题看来,你可以在- (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse *)response
代理方法中处理HTTP状态码:
- (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse*)response
{
if ([response isKindOfClass: [NSHTTPURLResponse class]])
statusCode = [(NSHTTPURLResponse*) response statusCode];
}