用AFNetworking失败发布序列化的对象

我有一个数据对象,称为DataElement。 它包含一串Base64转换图像字节,以及其他一些字段。

我试图发布这个我的wcf服务,并得到一个错误“(200-299)的预期状态代码,得到了400。

目标是将数据+图像发布到WCF(rest)服务,并获得一个修改后的图像 – 端到端testing我正在工作。

在我的post方法中,如果我将编码的string留空在对象上,一切正常,但如果该string是空的以外的东西,我会得到这个错误。

我的WCF服务甚至没有被击中,它只是炸弹正确的错误。 这是我的post方法…我做错了什么?

- (void)postDataToServer:(NSString*)server dataElement:(DataElement*)dataElement asJson:(BOOL)useJson { NSString *urlString = [[NSString alloc] init]; NSData *encodedData; urlString = [[server copy] stringByAppendingString:@"EchoXml"]; encodedData = [self encodeDataElementAsXml:dataElement]; NSURL *url = [NSURL URLWithString:urlString]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:urlString parameters:nil]; [request setHTTPBody:encodedData]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { [_responseTextView setText:[NSString stringWithFormat:@"Successfully uploaded file to %@", urlString]]; NSObject *httpResponseObject; httpResponseObject = [self parseResponseAsXml:responseObject]; if ([httpResponseObject isKindOfClass:[DataElement class]]) { DataElement *dataElement = (DataElement *)httpResponseObject; _responseTextView.text = dataElement.DataText; if (dataElement.DataImageBase64 != nil) { UIImage *dataImage = [self getImageFromString:dataElement.DataImageBase64]; self.responseImageView.image = dataImage; } } NSLog(@"Successfully uploaded file to %@", urlString); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // It goes here immediately [_responseTextView setText:[NSString stringWithFormat:@"Error: %@", error]]; NSLog(@"Error: %@", error); }]; [operation start]; } 

编辑:对不起,当我把它粘贴在

你的代码的重要部分是:

 NSString* urlString = [server stringByAppendingString:@"EchoXml"]; NSURL *url = [NSURL URLWithString:urlString]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:urlString parameters:nil]; 

AFNetorking请求的实际URL是AFHTTPClient的基本URL,附加了指定的path

你的错误是你再次指定相同的urlString

所以,如果urlStringhttp://your.server.com/EchoXml ,那么您请求的有效URL是http://your.server.com/EchoXmlhttp://your.server.com/EchoXml 。 正如你所看到的,这是行不通的。

修复您的基本url和path,使其更合适。 由于您没有说明您要访问的URL,因此很难提供更多的细节。 也许server应该是基地址,而EchoXml的path?

我知道这个问题不好回答我自己的问题,但是我发现并解决了这个问题。 底线,我上面使用的代码是很好的 – 可能不是最优的(正如Kurt指出的那样),但是它做它应该做的事情。

问题是我的WCF服务 – REST服务请求默认有一个65K的上传限制。 我重新configuration了服务,以允许大file upload,一切都很好。