我正在制作一款与特定ASP.NET服务器交互的iPhone应用程序。我已经注册了以下代码:
- (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);
}];
}
但是它给了我以下与Content-Type有关的错误:
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=<>}
我不确定这个错误是来自服务器端还是我犯了一些错误。我该如何解决这个错误?
答案 0 :(得分:0)
默认情况下,AFHTTPResponseSerializer
支持处理Content-Type
与application/json
,text/json
,text/javascript
相等的请求回复。如果您的服务器返回Content-Type
等于text/html
或其他的响应,则AFHTTPResponseSerializer
将不会处理您的响应并抛出错误。您可以自己添加接受类型,如下所示:
AFJSONResponseSerializer *serializer = [AFJSONResponseSerializer serializer];
NSMutableSet *acceptTypes = [NSMutableSet setWithSet:serializer.acceptableContentTypes];
[acceptTypes addObject:@"your-content-type"];
serializer.acceptableContentTypes = acceptTypes;
manager.responseSerializer = serializer;
答案 1 :(得分: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);
}];
这是创建请求,根据requestSerializer设置设置其Content-Type,并为您编码JSON。
更新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);
}];
}
在AppDelegate文件中声明此方法并将其调用如下: -
[Appdelegate callWebServicePOST_withAPIName:@"url string" withParameters:params withBlock:^(BOOL isSuccess, NSInteger statusCode, id response) {
if (isSuccess) {
/* Do further procedure here */
}
else {
NSLog (@"%@", [error localizedDescription])
}
}