创建URL,有这样一个方法
URLWithString:(NSString *)URLString relativeToURL:(nullable NSURL *)baseURL
AFN里边就是用的这个方法来拼接URL,如果类似这样
NSURL *url = [NSURL URLWithString:@"http://192.168.0.0/api/apk"];
NSURL *newUrl = [NSURL URLWithString:@"/user/login" relativeToURL:url];
那么恭喜你,结果就是这样 http://192.168.0.0/user/login(/api/apk都没有了哦)
如果是这样
NSURL *url = [NSURL URLWithString:@"http://192.168.0.0/api/apk"];
NSURL *newUrl = [NSURL URLWithString:@"user/login" relativeToURL:url];
那么结果就是这样 http://192.168.0.0/api/user/loing
注意看上边写法的区别
结果都不是自己想要的,一个是吃掉了斜杠后的所有,一个是吃掉 了最后一个斜杠后的内容
解决方法如下
NSURL *url = [NSURL URLWithString:@"http://192.168.0.0/api/apk"];
url = [url URLByAppendingPathComponent:@""];
NSURL *newUrl = [NSURL URLWithString:@"user/login" relativeToURL:url];
结果当然就是很完美的拼接
注意,注意,注意
[NSURL URLWithString:@"user/login" relativeToURL:url]这个方法的string参数,如果你又加了一个斜杠,类似这样[NSURL URLWithString:@"/user/login" relativeToURL:url],那么恭喜你,relativeToURL中的url斜杠后的东西,全部被吃掉了。
神奇的地方,就是拼接的string中,前边不要有斜杠,如果有斜杠,就会默认的处理掉url斜杠后的内容。而拼接一个空的字符串,系统就会自动加上一个斜杠来拼接string的内容。貌似,安卓也有类似的问题哦!!!
网友评论