我有一个名为DataElement的数据对象。它包含一串Base64转换后的图像字节,以及其他几个字段。
我试图将此帖子发布到我的wcf服务并收到错误'预期状态代码在(200-299),得到400。
目标是将数据+图像发布到WCF(休息)服务,并获得修改后的图像 - 对我正在进行的工作进行端到端测试。
在我的post方法中,如果我将编码的字符串留空对象,一切正常 - 但如果该字符串不是空的,我会收到此错误。
我的WCF服务甚至没有被击中,它只是对错误进行了直接轰炸。这是我的帖子方法......我做错了什么?
- (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];
}
编辑:抱歉,当我将其粘贴到...时格式化得很糟糕。
答案 0 :(得分:1)
代码的重要部分是:
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请求的实际网址是AFHTTPClient
的基本网址,并附加了指定的path
。
您的错误是您再次指定相同的urlString
。
因此,如果urlString
为http://your.server.com/EchoXml
,那么您请求的有效网址为http://your.server.com/EchoXmlhttp://your.server.com/EchoXml
。如你所见,这不起作用。
修复您的基本网址和路径,使其更合适。由于您没有说明您要访问的URL,因此很难提供更多详细信息。也许server
应该是基本网址,而EchoXml
是路径?
答案 1 :(得分:0)
我知道回答我自己的问题的不良形式 - 但我发现并解决了问题。最重要的是,我上面使用的代码很好 - 可能不是最优的(正如Kurt所指出的那样),但它确实做了它应该做的事情。
问题出现在我的WCF服务上 - 默认情况下,REST服务请求的上传限制为65k。我重新配置了服务以允许大文件上传,一切都很好。