我正在尝试将我的付款成功消息上传到我的服务器。以下是我的代码
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",myTokenString] forHTTPHeaderField: @"Authorization"];
AFHTTPRequestOperation *operation = [manager POST:@"MYAPI" parameters:paramsDict success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error.localizedDescription);
}];
[operation start];
但我收到错误代码500(内部服务器错误)。但我的服务器拥有所有信息和API调用是成功的。谁能帮助我理解为什么它会进入错误块?
答案 0 :(得分:1)
在新的AFNetworking版本中,您不需要AFHTTPRequestOperation类的初始化来处理请求,因此您只需调整代码如下:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",myTokenString] forHTTPHeaderField: @"Authorization"];
[manager POST:@"MYAPI" parameters:paramsDict success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error.localizedDescription);
}];
答案 1 :(得分:0)
默认情况下,requestSerializer
设置为AFHTTPRequestSerializer
的实例,这意味着您的请求的Content-Type
将为application/x-www-form-urlencoded
。
但是,如果您的服务器需要该API的application/json
内容类型,那么您必须设置为AFJSONResponseSerializer
的实例
例如。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
答案 2 :(得分:0)
对您的网址进行编码。
NSString *unescaped = @"http://www";
NSString *escapedString = [unescaped stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
答案 3 :(得分:0)
我遇到了与AFNetworking POST相同的问题以及有时在GET调用上但是......有时我会得到500内部服务器错误,尽管服务器收到请求参数!!最后,经过我的Web服务后端开发人员的一些研究,我发现它是由于服务器端的DLL配置错误导致的,特别是 System.reflection DLL文件。从服务器端删除文件(如果存在)会删除该问题,否则从Bin中复制粘贴(如果它已经不存在)会消除该问题。这非常令人费解,但显然它已经解决了!!
和是。它与AFNETWORKING无关! 答案假设是Microsoft azure服务器
答案 4 :(得分:0)
尝试使用formData
[manager POST:@"API" parameters:paramsDict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
它的AFNetworking 3.0方法,但你可以在AFNetworking 2.x中使用相同的(formData)
答案 5 :(得分:0)
尝试查看android的详细接受/内容类型。你知道他们是否在使用改造吗?最有可能的是,它与您的请求或响应序列化程序无关,与服务器的期望值不匹配。
答案 6 :(得分:0)
将以下编码添加到AFURLResponseSerialization.m文件并删除现有代码。
@implementation AFJSONResponseSerializer
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/xml",@"text/html", nil];
return self;