iOS开发网络请求,请求参数只有一个字符串问题怎么解决

319 阅读1分钟

需求:网络请求参数只有字符串怎么办?

问题: 使用AFN请求,请求参数只有一个字符串,因为网络接口全都是经过加密的,加密结果就是一个很长的字符串.
例如:

K9OJC6pAM5ME2FY4iOmOQhHiZtIdpJyDMKx60+5puhw9tRe2xhHGU/uIxG+d1fohc3LuA/5s+kD/CzRy73klAhEQWtagKrMYkBO1+NNxqvNfauICsxruHlrY8AGGYv11/kJUZXYspCfTqhPn3bVvCMirVyPLAL4idURiYHqva4I2ZQLU/gtXF+jw+yep5Vo9T0V0Cnxf7JkvgrSDG1IlKHf2wIXs/8qj04zNqk24uq87LRePL4NFZVYlwgrOLbiXMevNkTp+C7jsa9qsvAtXIwdgNKSHNEHzvL3RZ46J1pev1gxTlOK1X9TDcKyGrdEq1wqICYBi8Yud/GSZmlvOxA==

常规参数传递:@{"data":字符串} 但是实际上是只传String

[manager POST:url parameters:id类型满足只传字符串 progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)

     {
        
     }

      failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)

     {

        failure(error);

     }];

结果后台一直返回400,而且接收不到参数.

解决办法: 如果后台一直接收不到参数只可能是AFN的AFURLRequestSerialization序列化的地方出现了问题 这个是序列化的方法

- (NSString *)URLEncodedStringValue {

    if (!self.value || [self.value isEqual:[NSNull null]]) {

        return AFPercentEscapedStringFromString([self.field description]);

    } else {

        return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedStringFromString([self.field description]), AFPercentEscapedStringFromString([self.value description])];

    }

}

方法一. 修改内部源码如下,field指的是传的key

- (NSString *)URLEncodedStringValue

{

    if (!self.value || [self.value isEqual:[NSNull null]]) {

        return AFPercentEscapedStringFromString([self.field description]);

    }else if(!self.field || [self.field isEqual:[NSNull null]]){

        return [NSString stringWithFormat:@"%@",self.value];

    }else {

        return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedStringFromString([self.field description]), AFPercentEscapedStringFromString([self.value description])];

    }

}

方法二. 外部设置

[manager.requestSerializer setValue:@"text/plain;charset=utf-8" forHTTPHeaderField:@"Content-Type"];

找了半天,终于解决了