Почему мой POST-запрос NSURLMutableRequest действует как GET-запрос? - PullRequest
2 голосов
/ 13 августа 2011

У меня проблема с моим целевым кодом c.У меня есть API-интерфейс WCF, защищенный ключом API, который принимает запросы POST и записывает их в Java-сервлет с C #.В любом случае, это прекрасно работает при тестировании с Fiddler, но не так хорошо для цели C. Когда я пытаюсь запустить POST из моей цели C, он «действует» так, как NSURLMutableRequest ищет GET, поскольку ответ возвращает только некоторое значение по умолчаниюкод, который я написал для метода GET.Кто-нибудь знает, почему это так, и, кроме того, что я могу сделать, чтобы это исправить?Вот код, который я использую (довольно успешно) для выполнения других запросов POST с целью C.

- проблема в том, что я указываю ключ API в URL для NSMutableRequest?Это единственное, что я могу понять.

Вот код:

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 ]

1 голос
/ 14 августа 2011

В итоге я использовал ASIHTTPRequest для запуска POST-запроса к службе REST WCF, и теперь все, кажется, работает гладко. Это означает, что, вероятно, существует какой-то механизм кодирования URL для ключа API, который работает за кулисами, который был плохо документирован для 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];
0 голосов
/ 13 августа 2011

Вы пытались установить заголовок Content-Length?WCF / IIS может игнорировать тело, если его длина не определена как заголовок.

...