AFNetworking POSTの場合、パラメータがJSONの場合は""ソリューションが追加されます

2454 ワード

AFNはデフォルトでNSDATAを使用してエスケープを行うため、パラメータでは「」をパラメータで「」にエスケープする場合がありますので、この問題を解決するにはCategoryを単独で書いてエスケープを戻し、ネットワークリクエストを行う必要があります.
直接コードをアップします.これはAFJSOnRequestSerializerクラスのクラスです.
.hファイル
#import 

@interface AFJSONRequestSerializer (APJSONRequestSerializer)

- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
                                        withParameters:(nullable id)parameters
                                                 error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW;

@end

.mファイル
#import "AFJSONRequestSerializer+ APJSONRequestSerializer.h"

@implementation AFJSONRequestSerializer (APJSONRequestSerializer)


- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
                               withParameters:(id)parameters
                                        error:(NSError *__autoreleasing *)error
{
    NSParameterAssert(request);
    
    if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) {
        return [super requestBySerializingRequest:request withParameters:parameters error:error];
    }
    
    NSMutableURLRequest *mutableRequest = [request mutableCopy];
    
    [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {
        if (![request valueForHTTPHeaderField:field]) {
            [mutableRequest setValue:value forHTTPHeaderField:field];
        }
    }];
    
    if (parameters) {
        if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) {
            [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        }
        
        NSString *jsonString = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error] encoding:NSUTF8StringEncoding];
        jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
        NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
        
        [mutableRequest setHTTPBody:jsonData];
        //        [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]];
    }
    
    return mutableRequest;
}

@end

上のコードを直接使えば、エスケープされる問題を解決できます.