2015-06-25 7 views
1

Я пытаюсь получить доступ к веб-службе Microsoft CRM, и для этого я использую AFNetworking. Служба настроена для обработки запроса и ответа JSON.Сообщение AFSetworking JSON, использующее Objective C, возвращает неподдерживаемый тип носителя

Но когда я делаю JSON пост я получаю эту ошибку:

"com.alamofire.serialization.response.error.data=<>, NSLocalizedDescription=Request failed: unsupported media type (415)} "

Что такое ошибка я делал по коду.

Это мой код:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 

    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept" ]; 
    [manager.requestSerializer setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type" ]; 

    NSDictionary *parameters = @{@"username": self.Username.text, 
           @"password": self.Password.text}; 

    [manager POST:@"http://www.xxxxxx.com/xxxx.svc/xxxxx" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"JSON: %@", responseObject); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
    }]; 
+0

Почему вы боитесь проводкой URL? 90% времени, когда кто-то вставляет URL-адрес в свой браузер и сразу узнает, что вы сделали неправильно. – gnasher729

ответ

0

погуглить для «статуса 415» считает, что это прямо из лошадей рот:

«Сервер отказывается обслуживать запрос, поскольку объект запроса находится в формате, не поддерживаемом запрошенным ресурсом для запрошенного метода».

Другими словами, сервер не поддерживает приложение/json.

0

Не уверен, что вы просите от CRM, но вы можете попробовать это:

[request setValue:@"image/png" forHTTPHeaderField:@"Content-Type"]; 
1

На самом деле сервер ожидал XML-запрос SOAP. Это код, который решить мою проблему:

NSString *soapMessage = [NSString stringWithFormat:@"<Authenticate xmlns=\"http://tempuri.org/\"><userName>"]; 
soapMessage = [soapMessage stringByAppendingString:self.loginUsername.text]; 
soapMessage = [soapMessage stringByAppendingString:@"</userName>"]; 
soapMessage = [soapMessage stringByAppendingString:@"<password>"]; 
soapMessage = [soapMessage stringByAppendingString:self.loginPassword.text]; 
soapMessage = [soapMessage stringByAppendingString:@"</password></Authenticate>"]; 

NSURL *url = [NSURL URLWithString:@"http://www.xxxxx.com/xxxxxx.svc/Authenticate"]; 

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage length]]; 

[theRequest addValue: @"application/xml; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 
[theRequest addValue: @"http://tempuri.org/xxxxxx/Authenticate" forHTTPHeaderField:@"SOAPAction"]; 
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 
// NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

if(theConnection) { 
    NSError *WSerror; 
    NSURLResponse *WSresponse; 
    NSString *theXml; 
    NSData *myData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&WSresponse error:&WSerror]; 
    theXml = [[NSString alloc]initWithBytes:[myData bytes] length:[myData length] encoding:NSUTF8StringEncoding]; 

    NSLog(@"Data : %@, %@",theXml, myData);  
} 
else { 

    NSLog(@"theConnection is NULL"); 
} 

Это сообщение помогло мне Passing parameter to WCF function using Objective c

Смежные вопросы