AFNetworking POSTの場合、パラメータがJSONの場合は""ソリューションが追加されます
2454 ワード
AFNはデフォルトでNSDATAを使用してエスケープを行うため、パラメータでは「」をパラメータで「」にエスケープする場合がありますので、この問題を解決するにはCategoryを単独で書いてエスケープを戻し、ネットワークリクエストを行う必要があります.
直接コードをアップします.これはAFJSOnRequestSerializerクラスのクラスです.
.hファイル
.mファイル
上のコードを直接使えば、エスケープされる問題を解決できます.
直接コードをアップします.これは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
上のコードを直接使えば、エスケープされる問題を解決できます.