2015-06-25 46 views
1

我想訪問一個Microsoft CRM Web服務,我正在使用AFNetworking來做到這一點。該服務被配置爲處理JSON請求和響應。使用ObjectiveC AFNetworking JSON後返回不受支持的媒體類型

但是當我做了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

你爲什麼怕發佈的網址是什麼? 90%的時間有人在瀏覽器中粘貼網址,並立即知道你做錯了什麼。 – gnasher729

回答

0

谷歌搜索「狀態415」直接從馬認爲這mouth:

「服務器拒絕爲請求提供服務,因爲請求的實體的格式不是所請求方法的請求資源支持的格式。」

換句話說,服務器不支持application/json。

0

不知道你是從CRM問什麼,但你可以試試這個:

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

實際上,服務器正在等待SOAP XML請求。這是解決我的問題代碼:

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

相關問題