AFNetwoking POST调用返回500内部服务器错误,但服务器获取请求参数

时间:2016-04-28 13:15:26

标签: ios objective-c afnetworking-2

我正在尝试将我的付款成功消息上传到我的服务器。以下是我的代码

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调用是成功的。谁能帮助我理解为什么它会进入错误块?

7 个答案:

答案 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;