我的目标c代码出了问题。我有一个受API密钥保护的WCF API,我构建它接受POST请求并使用C#将它们写入Java servlet。无论如何,这在使用Fiddler进行测试时效果很好,从目标C不太好。当我尝试从目标C运行POST时,它“行为”就像NSURLMutableRequest正在寻找GET,因为响应只返回一些默认值我为GET方法编写的代码。有谁知道这是为什么,而且,我能做些什么来解决它?以下是我使用(非常成功)使用目标C进行其他POST请求的代码。
问题是我在NSMutableRequest的URL中指定API密钥的事实?这是我能想到的唯一一件事。
以下是代码:
NSString* theMessage = [NSString stringWithFormat:@"<MyRequestObject xmlns='http://schemas.datacontract.org/2004/07/MyService'></MyRequestObject>"];
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:POST_API_URL]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:240.0];
[theRequest setHTTPMethod:@"POST"];
[theRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
[theRequest setHTTPBody:[theMessage dataUsingEncoding:NSUTF8StringEncoding]];
NSString *msgLength = [NSString stringWithFormat:@"%d", [theMessage length]];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
NSURLResponse* response;
NSError *error;
NSData* result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
答案 0 :(得分:1)
我最终使用ASIHTTPRequest
来运行对WCF REST服务的POST请求,现在一切似乎都在顺利运行。这意味着可能存在某种针对API密钥的URL编码机制,这种机制正在幕后进行,而NSMutableURLRequest
知道这些机制的记录很少。好消息是,我已经解决了这个问题。这是我使用的代码:
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:POST_API_URL]];
[request appendPostData:[[NSString stringWithFormat:@"<MyRequest xmlns='http://schemas.datacontract.org/2004/07/MyService'>all of my request params in here</MyRequest>"] dataUsingEncoding:NSUTF8StringEncoding]];
[request setRequestMethod:@"POST"];
[request addRequestHeader:@"Content-Type" value:@"text/xml"];
[request startSynchronous];
答案 1 :(得分:0)
您是否尝试过设置Content-Length标头?如果WCF / IIS没有将其长度定义为标题,则WCF / IIS可能会忽略该主体。