iOS如何处理传递给AFHTTPSessionManager GET方法的空格或特殊字符?

Ale*_*one 4 url objective-c ios afnetworking

我有一个AFHTTPSessionManager负责发出GET请求的实例.请求中的一个参数 - 名称中可以包含空格,也可能包含URL中可能不可接受的其他字符.

我看到AFHTTPSessionManager它不会自动用适当的%符号替换空格,因此下面的请求将失败.如何处理我的字符串以将其转换为URL兼容字符串? test user to test%20user

我可以通过替换字符串的出现来做字符串,但我正在寻找一种更通用的方法来处理所有非url安全字符.

NSURL* baseURL = [NSURL URLWithString:[APP_DELEGATE hostString]];

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];

//is there a way for me
NSString* path = @"user/?name=test user"

[manager GET:path parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
    DLog(@"Success: %@",responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    DLog(@"Failure:  %@",error);
}];
Run Code Online (Sandbox Code Playgroud)

Aar*_*ron 6

我认为你正在寻找的方法是

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
Run Code Online (Sandbox Code Playgroud)

那是:

NSString* path = [@"user/?name=test user" stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可能只需要将百分比编码应用于可能包含无效字符的实际值(即"测试用户")

另一个选择是使用AFNetworking的get方法提供的NSDictionary.使用此选项,您可以使用键/值对{"name":"test user"}创建一个nsdictionary,然后在AF的get方法中传递它.AF会将此作为查询字符串添加到您的获取路径中.

NSString* path = @"user";
NSDictionary* params = [NSDictionary dictionaryWithObject:@"test user" forKey:@"name"];
[manager GET:path parameters:params success...
Run Code Online (Sandbox Code Playgroud)

  • 使用AFNetworking的params字典是一个非常好的解决方案 (2认同)