2016-08-01 12 views
0

Ich mache eine iPhone-App, die mit einem bestimmten ASP.NET-Server interagieren wird. Ich habe den folgenden Code bekam zu registrieren:AFNetworking Version 3 Content-Type-Fehler

- (void)post:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(id))success failure:(void (^)(NSError *))failure { 
    path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    NSLog(@"path: %@, %@", path, parameters); 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
    [manager.requestSerializer setValue:@"parse-application-id-removed" forHTTPHeaderField:@"X-Parse-Application-Id"]; 
    [manager.requestSerializer setValue:@"parse-rest-api-key-removed" forHTTPHeaderField:@"X-Parse-REST-API-Key"]; 
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    manager.securityPolicy.allowInvalidCertificates = YES; 

    [manager POST:path parameters:parameters progress:nil success:^(NSURLSessionTask *task, id responseObject) { 
     NSLog(@"JSON: %@", responseObject); 
     [myDelegate StopIndicator]; 
     success(responseObject); 
    } failure:^(NSURLSessionTask *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
     [myDelegate StopIndicator]; 
     failure(error); 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:error.localizedDescription delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
       [alert show]; 
    }]; 

} 




//Register 

-(void)registerUser:(NSString *)usertype firstname:(NSString *)firstname middlename:(NSString *)middlename lastname:(NSString *)lastname registration:(NSString *)registration password:(NSString *)password confirmpass:(NSString *)confirmpass email:(NSString *)email mobile:(NSString *)mobile success:(void (^)(id))success failure:(void (^)(NSError *))failure 
    { 
     NSDictionary *requestDict = @{@"UserTypeId" : usertype, @"FirstName" : firstname, @"MiddleName" : middlename,@"LastName" : lastname, @"RegNumber" : registration ,@"Password": password,@"ConfirmPassword" : confirmpass, @"EmailAddress" : email, @"MobileNumber" : mobile}; 

     [self post:kUrlSignup parameters:requestDict success:^(id responseObject) { 

      NSLog(@"registerWithEmail: %@", responseObject); 
      responseObject=(NSMutableDictionary *)[NullValueChecker checkDictionaryForNullValue:[responseObject mutableCopy]]; 
      if([self isStatusOK:responseObject]) 
      { 
       success(responseObject); 
      } else 
      { 
       [myDelegate StopIndicator]; 
       failure(nil); 
      } 
     } failure:^(NSError *error) 
     { 
      [myDelegate StopIndicator]; 

      failure(error); 
     }]; 

    } 

Aber es gibt mir die folgende Fehlermeldung, die mit Content-Type zu tun:

Error: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unsupported media type (415)" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7c14e5c0> { URL: http://192.168.0.129/IISService/Service.svc/Registration } { status code: 415, headers { 
    "Cache-Control" = private; 
    "Content-Length" = 0; 
    Date = "Mon, 01 Aug 2016 05:38:44 GMT"; 
    Server = "Microsoft-IIS/8.5"; 
    "X-AspNet-Version" = "4.0.30319"; 
    "X-Powered-By" = "ASP.NET"; 
} }, NSErrorFailingURLKey=http://192.168.0.129/IISService/Service.svc/Registration, NSLocalizedDescription=Request failed: unsupported media type (415), com.alamofire.serialization.response.error.data=<>} 

Ich bin nicht sicher, ob dieser Fehler von Server-Seite ist oder ich mache einen Fehler. Wie kann ich diesen Fehler beheben?

+0

@imjaydeep - Diese Lösung nicht das Problem lösen hat. – Gurp321

Antwort

0

standardmäßig der AFHTTPResponseSerializer Unterstützung Deal mit Beantwortung der Anfrage, die Content-Type gleich entweder von application/json, text/json, text/javascript. Wenn Ihr Server eine Antwort zurückgibt, die Content-Type gleich text/html oder andere ist, wird die AFHTTPResponseSerializer nicht mit Ihrer Antwort umgehen und einen Fehler werfen. Sie können Arten von youself hinzufügen akzeptieren, wie unten:

AFJSONResponseSerializer *serializer = [AFJSONResponseSerializer serializer]; 
NSMutableSet *acceptTypes = [NSMutableSet setWithSet:serializer.acceptableContentTypes]; 
[acceptTypes addObject:@"your-content-type"]; 
serializer.acceptableContentTypes = acceptTypes; 
manager.responseSerializer = serializer; 
+0

Ich habe bereits den Inhaltstyp festgelegt und der Server sendet die Anwendung/json. – Gurp321

0
AFHTTPSessionManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
NSDictionary *parameters = @{@"username":username, @"password":password}; 
[manager POST:@"URL Here" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

Dies macht die Erstellung des Antrags, seine Content-Type Einstellung nach der requestSerializer Einstellung, und kodiert für das JSON für Sie.

Update 1: -

+(void)callWebServicePOST_withAPIName:(NSString *)url withParameters:(id)parameters withBlock:(ResponseCompilationBlock)_Block { 
    [[AFHTTPRequestSerializer serializer] setTimeoutInterval:60]; 
    [[AFHTTPSessionManager manager].requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 

    [[AFHTTPSessionManager manager] POST:url parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) { 

    } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
     NSLog (@"response:%@", responseObject); 
     _Block (YES, 200, responseObject); 
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     NSLog(@"error:%@", error); 
     _Block (NO, 400, error); 
    }]; 
} 

Deklarieren Sie diese Methode in AppDelegate Datei und nennen Sie es wie folgt aus: -

[Appdelegate callWebServicePOST_withAPIName:@"url string" withParameters:params withBlock:^(BOOL isSuccess, NSInteger statusCode, id response) { 
    if (isSuccess) { 
     /* Do further procedure here */ 
    } 
    else { 
     NSLog (@"%@", [error localizedDescription]) 
    } 
} 
+0

ich benutze afnetworking 3 und AFHTTPRequestOperation wurde in diesem entfernt. – Gurp321

+0

Ich habe meine Antwort von AFHTTPRequestOperation auf AFFHTTPSessionManager aktualisiert. Bitte versuchen Sie es. Ich verwende auch AFNetworking 3.x für meine Apps und hoffe, dass Ihnen das weiterhilft. –

+0

Sie müssen diese Methode in "registerUser" ändern. Stellen Sie ein Anfragewörterbuch und ändern Sie den Code von [self post:] mit dem geposteten. –