为什么我的NSURLMutableRequest POST请求就像GET请求一样?

时间:2011-08-13 03:53:29

标签: objective-c wcf http-post nsmutableurlrequest

我的目标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];

2 个答案:

答案 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可能会忽略该主体。