我使用这种类型的功能从我的iOS应用程序调用我的Web服务:
-(NSData *)getMainMenuJsonData{
NSString *urlAsString = [NSString stringWithFormat:@"%@%@/%@/%@",[configs valueForKey:@"wsURL"], [configs valueForKey:@"clientToken"], [configs valueForKey:@"appToken"], [CommonsUtils getCommonUtil].getAppLanguage];
NSString* webStringURL = [urlAsString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:webStringURL] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:2.5];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
NSUInteger statusCode = ((NSHTTPURLResponse *)response).statusCode;
if (statusCode == 200 && error == Nil) {
if (error != Nil) {
return Nil;
} else {
return data;
}
}
else {
return Nil;
}
}
据我了解,我发送的内容如下:
http://myserver.com/WSFunction/Parameter1/Parameter2等等。
这对我来说是一个问题,因为如果我需要添加1个参数,我必须创建具有几乎相同功能但使用新参数的另一个服务,即:
http://myserver.com/WSFunction/Parameter1/Parameter2/Parameter3
我的想法是始终调用相同的Web服务,但是传递服务的版本和带有我需要的所有参数的JSON,但据我所知,我必须在消息中扭曲JSON(也许这这不是正确的词,也许这就是为什么我在Google中找不到任何东西的原因,所以最后我将完成以下内容:
http://myserver.com/WSVersionNumber/[SerializedJSON]
在服务器中我会有这样的逻辑:
案例:“版本1”
反序列化JSON并使用Parameter1和Parameter2
案例:“第2版”
反序列化JSON并使用Parameter1和Parameter2以及Parameter3
最后我想要的是在iOS中做这样的事情:
-(NSData *)getMainMenuJsonData{
NSString *urlAsString = @"http://myserver.com/WSVersionNumber/"
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:webStringURL] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:2.5];
[urlRequest setParameterName:@"SerializedJSON" withValue:SerializedJSONVar];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
NSUInteger statusCode = ((NSHTTPURLResponse *)response).statusCode;
if (statusCode == 200 && error == Nil) {
if (error != Nil) {
return Nil;
} else {
return data;
}
}
else {
return Nil;
}
}
有没有办法在iOS中做这样的事情?我对使用第三方库这样做不感兴趣,因为这是企业政策。
提前致谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
感谢Tejas Patel发布的答案,它引导我找到正确的信息。
代码以这样结束:
-(NSData *)getLogin:(NSMutableDictionary *)pData {
NSString *tUrlAsString = [NSString stringWithFormat:@"%@%@/%@/%@/GetLogin",[_Configs valueForKey:@"wsURL"], [_Configs valueForKey:@"wsVersion"], [_Configs valueForKey:@"clientToken"], [CommonsUtils getCommonUtil].getAppLanguage];
NSString* tWebStringURL = [tUrlAsString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest * tUrlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:tWebStringURL] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:2.5];
[tUrlRequest setHTTPMethod:@"POST"];
[tUrlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *tJsonData;
if ([NSJSONSerialization isValidJSONObject:pData]) {
NSError *tError;
tJsonData = [NSJSONSerialization dataWithJSONObject:pData options:NSJSONWritingPrettyPrinted error:&tError];
if (!tJsonData) {
NSLog(@"json Data %@",tError.description);
return Nil;
} else {
NSString *tJSONString = [[NSString alloc] initWithBytes:[tJsonData bytes] length:[tJsonData length] encoding:NSUTF8StringEncoding];
NSLog(@"JSON String %@",tJSONString);
[tUrlRequest setHTTPBody:tJsonData];
NSURLResponse * tResponse = nil;
NSData * tData = [NSURLConnection sendSynchronousRequest:tUrlRequest returningResponse:&tResponse error:&tError];
NSUInteger tStatusCode = ((NSHTTPURLResponse *)tResponse).statusCode;
if (tStatusCode == 200 && tError == Nil) {
if (tError != Nil) {
return Nil;
} else {
return tData;
}
} else {
return Nil;
}
}
} else {
NSLog(@"This Data can't be serialized");
return Nil;
}
}
最后,您只需在setHTTPBody中添加一个JSON,因此在您的REST服务中,您必须接收JSON的所有节点,这些节点具有相同的变量名称。
我希望将来可以帮助某人。
问候。