AFNetworking--参数为NSString类型请求问题解决

AFN是想必是很多人项目中的常客了,当然鄙人也用过很多次了,项目中传递的参数一般都是以字典类型进行传递的,比如登陆的用户名和密码,但是遇到一个Base64 加密的String 类型的数据传递后台,然而此时,NSString 作为参数传递进AFN发送POST 请求,然而..........然而没有调用网络请求方法,下面直接上代码描述具体解决方案

问题描述: 一个Base64 加密数据(NSString类型),作为参数调用AFN封装的网络请求,请求方法不调用,以下是控制器调用模型中网络请求方法

NSString *loginDataRsaBase64 = [RSAEncryptor encryptString:jsonStr publicKey:publicKeyString];
NSLog(@"jsonStr加密前>>%@", jsonStr);
NSLog(@"jsonStr加密后>>%@", loginDataRsaBase64);
NSLog(@"jsonStr解密后>>%@", [RSAEncryptor decryptString:loginDataRsaBase64 privateKey:privateKeyString]);

//点击登录按钮,post用户数据到后台
[HSLoginModel logInInfoWithSuccessBlock:^(NSArray *array){
    if (array != nil)
    {
        /*跳转到主界面*/
        NSLog(@"%@",array);
        
        //登陆成功后,保存用户的用户名和密码
        NSUserDefaults *account = [NSUserDefaults standardUserDefaults];
        //保存NSString
        [account setObject:self.userAccount.text forKey:@"userAccount"];
        [account setObject:self.passWord.text forKey:@"passWord"];
    }
    
} errorBlock:^(NSError *error) {
    //
} requPara:loginDataRsaBase64];

网络请求方法
//发送异步请求,获取数据,字典转模型
+(void)logInInfoWithSuccessBlock:(void(^)(NSArray *array))successBlock errorBlock:(void(^)(NSError *error))errorBlock requPara:(NSString *)requestParameter

然而,当你传入的参数类型为NSString类型的时候,AFN并没有发送成功

原因分析

AFN框架对于参数是NSString类型没有做处理

解决方法

方法一: 网络工具修改方案

在你的网络封装的网络工具类里面,添加 setQueryStringSerializationWithBlock 的调用
//设置返回的格式
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id  parameters, NSError * _Nullable __autoreleasing * _Nullable error) {
    
    return parameters;
}];
方法二:AFN网络框架修改方案

AFURLRequestSerialization.m 中的requestBySerializingRequest方法中添加

if ([parameters isKindOfClass:[NSString class]])
{
    [mutableRequest setHTTPBody:[parameters dataUsingEncoding:NSUTF8StringEncoding]];
}
方法三:自己写一个网络请求,不用AFN
NSURL *url = [NSURL URLWithString:@"请求的地址"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// 指定请求方法:
request.HTTPMethod = @"POST";

// 实例化请求体字符串

NSString *body = loginDataRsaBase64;

// 将字符串转换成二进制数据

NSData *data = [body dataUsingEncoding:NSUTF8StringEncoding];

//设置请求体数据:
request.HTTPBody = data;

//发送异步网络请求.

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    
    // NSURLResponse *response: 服务器响应
    NSLog(@"%@",response);
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@",str);

    
}];

就这样,完美解决,希望对大家有帮助!

你可能感兴趣的:(AFNetworking--参数为NSString类型请求问题解决)