Objective c AFN将NSMutableDictionary作为POST发送

Objective c AFN将NSMutableDictionary作为POST发送,objective-c,afnetworking-2,http-post,Objective C,Afnetworking 2,Http Post,我刚开始使用AFN网络。在stack overflow中的一个好人的帮助下,我成功地实现了GET请求 现在我被困在提出一个发帖请求。我尝试了这段代码,但总是以失败告终。为什么 -(void) postEventInfo: (NSMutableDictionary *) eventInfoObject{ NSURL *url = [NSURL URLWithString:string]; AFHTTPSessionManager *manager = [[AFHTTPSessionManage

我刚开始使用AFN网络。在stack overflow中的一个好人的帮助下,我成功地实现了GET请求

现在我被困在提出一个发帖请求。我尝试了这段代码,但总是以失败告终。为什么

-(void) postEventInfo: (NSMutableDictionary *) eventInfoObject{

NSURL *url = [NSURL URLWithString:string];

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:url];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

[manager POST:string parameters:eventInfoObject success:^(NSURLSessionDataTask *task, id responseObject) {

    NSLog(@"JSON: %@", responseObject);
    //here is place for code executed in success case

} failure:^(NSURLSessionDataTask *task, NSError *error) {


    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error while sending POST"
                                                        message:@"Sorry, try again."
                                                       delegate:nil
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
    [alertView show];

    NSLog(@"Error: %@", [error localizedDescription]);
}];
 }
我收到以下错误消息:

错误:请求失败:内部服务器错误(500)

Thnx

EDIT1

好的,在测试了一点之后,我注意到连接实际上通过了,inte做了我想做的事情,但它仍然向我显示错误消息,意味着仍然会出现故障块

我想我的服务器正在发回text/html,这可能与此有关吗

零件已完成连接

EDIT2

    NSError *error;
NSData *event = [NSJSONSerialization dataWithJSONObject:eventInfoObject
                                                options:NSJSONWritingPrettyPrinted
                                                  error:&error];

if (! event) {
    NSLog(@"Got an error: %@", error);
} else {
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:event];
    [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[event length]] forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setURL:[NSURL URLWithString:string]];

    NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];

    [conn start];
}

如果服务器未设置
应用程序/json
内容类型
标题(或类似内容),
AFHTTPSessionManager
将失败。您可以修改AFNetworking
acceptableContentTypes
值,但更好的是,您只需修改服务器代码以返回适当的
内容类型

但是,如果您的服务器使用500代码进行响应,那么您会遇到一些更基本的问题,如果没有关于服务器的更多信息(例如代码、有关实现的一些详细信息等),我们可能无法解决这个问题


如果您有一个可用的
NSURLConnection
示例,我倾向于运行该代码和上面的代码,并通过观察请求。仔细观察请求之间的差异,问题可能会跳到你身上。

因此,问题在于使用AFNetworking时,你为HTTP管理器设置了基本URL,例如

http://api.example.com/
但当您发布请求时,您使用端点(相对于基本URL的路径)而不是绝对URL,例如

[manager POST:@"users/add" ...
自动转换为后台的绝对URL:

http://api.example.com/users/add
这样做显然是为了方便构建API客户端,这就是为什么POST、GET和其他方法采用字符串参数而不是NSURL

在你的特殊情况下

[manager POST:string ...


应该可以有效地解决问题。

您的服务器崩溃了。但原因是什么。当我使用普通的NSURLConnection@AndyYou send application/json发送它时,它可以正常工作,对吗?是的,我需要在代码中这样说吗@AndyRequestSerializer应该这样做谢谢Charles!我将使用它并查看它,我想我实际上已经设法进行了更改,以便服务器发送application/json。我是怎么知道的,因为去了url,我可以看到文本字体改变了。我下载了Charles,但我似乎无法让它显示从模拟器发出的请求。我看到一些教程,我必须手动放置代理和端口,但我的IOS模拟器没有wifi标签,我可以按下吗?我如何修复这个@RobI我在模拟器之前启动它。但是如果你检查你的模拟器,并试图找到wifi标签来选择代理和端口。你不会找到的。如果模拟器没有无线标签@Rob,我不知道在哪里配置设置。我不知道你说的这个wifi标签是什么意思。我从未见过,也从未做过任何事情。底线是,如果使用http(即非SSL),则无需执行任何操作。如果执行SSL,请转到“代理”-“代理设置…”并单击SSL选项卡。使用Charles查找。我看到post消息被发送了,类型是html/text。看了看我的服务器代码,发现我忘了更改它发回信息的某些部分。因此,一些地方发回了application/json和部分html/text,将其全部更改为application/json解决了这个问题。Thnx!!不起作用:(,post方法仍然有效,我的数据正在发布和更新,但警报视图仍然显示@Andy
[manager POST:@"/" ...