2016-04-28 10 views
9

Sto tentando di caricare il mio messaggio di pagamento riuscito sul mio server. Sotto sono il mio codiceAF La chiamata POST restituisce l'errore del server interno 500 ma il server ha ricevuto il parametro di richiesta

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init]; 
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",myTokenString] forHTTPHeaderField: @"Authorization"]; 


AFHTTPRequestOperation *operation = [manager POST:@"MYAPI" parameters:paramsDict success:^(AFHTTPRequestOperation *operation, id responseObject) { 

    NSLog(@"%@",responseObject); 


} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

    NSLog(@"%@",error.localizedDescription); 

}]; 
[operation start]; 

Ma sto ricevendo il codice di errore 500 (errore interno del server). Ma il mio server ha tutte le informazioni e la chiamata API è riuscita. Qualcuno può aiutarmi a capire perché sta entrando nel blocco errori?

+0

Hai provato a usare Fiddler (http://www.telerik.com/fiddler) o al postino (https://chrome.google.com/webstore/detail/postman/ fhbjgbiflinjbdggehcddcbncdddomop? hl = en) per vedere se è un errore sul tuo server? – JDx

+0

@JDx Sì. Ho provato in Postman anche il postino restituisce lo stesso errore. Ma la stessa chiamata funziona su Android. –

+0

@AjithKumar hai provato con AFN3.0? – Vvk

risposta

0

Per impostazione predefinita requestSerializer è impostato a un'istanza di AFHTTPRequestSerializer, il che significa che Content-Type della tua richiesta sarà application/x-www-form-urlencoded.

Ma se il vostro server richiede application/json tipo di contenuto per tale API, allora è necessario impostare a un'istanza di AFJSONResponseSerializer
AD ESEMPIO

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
0

Codifica il tuo URL.

NSString *unescaped = @"http://www"; 
NSString *escapedString = [unescaped stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; 
0

ero stato incontrando lo stesso problema con AFNetworking POST, così come a volte le chiamate GET, ma ... A volte vorrei avere un errore del server interno 500, anche se i parametri della richiesta del server ricevuto !! Infine, dopo alcune ricerche con i miei sviluppatori di backend di servizi Web, sono venuto a sapere che ciò è dovuto a una errata configurazione della DLL sul lato server, in particolare al file System.reflectionDLL. L'eliminazione del file dal lato server (se esistente) rimuove il problema, altrimenti il ​​backup del file dal Cestino (se non esiste già) rimuove il problema. Questo è piuttosto sconcertante ma a quanto pare lo risolve !!

E SÌ. NON HA NULLA DA FARE CON AFNETWORKING! La risposta assume server di Microsoft Azure

+0

Non so quanto sia credibile la fonte. Ad ogni modo, penso che ti aspetti che i fondatori di AFNetworking vengano a sapere che non ha niente a che fare con loro. E anche tu non ti sei preso la briga di commentare una delle risposte che potrebbero ovviamente aiutarci a capire che cosa ti ha veramente aiutato e non. Inoltre non hai menzionato che server stai usando, ecc. – Harris

0

Prova con formdata

[manager POST:@"API" parameters:paramsDict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { 

} progress:^(NSProgress * _Nonnull uploadProgress) { 

} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 

}]; 

è AFNetworking 3.0 Metodo, ma è possibile utilizzare lo stesso (formdata) in AFNetworking 2.x

0

Nella nuova versione AFNetworking, don 't bisogno di un'inizializzazione per la classe AFHTTPRequestOperation per gestire richiesta quindi basta regolare il codice come segue:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",myTokenString] forHTTPHeaderField: @"Authorization"]; 

[manager POST:@"MYAPI" parameters:paramsDict success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"%@",responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"%@",error.localizedDescription); 
}]; 
0

provare a vedere wh al dettaglio accept/content type è per Android. Sai se stanno usando il retrofit? Molto probabilmente avrà a che fare con il serializzatore di richieste o risposte che non corrisponde a ciò che il server si aspetta.

0

Aggiungere la codifica seguente al file AFURLResponseSerialization.m e rimuovere il codice esistente.

@implementation AFJSONResponseSerializer

self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/xml",@"text/html", nil]; 

return self; 
Problemi correlati