【发布时间】:2016-09-27 15:31:15
【问题描述】:
我一直在尝试,但出现错误
NSLocalizedDescription=请求失败:错误请求 (400), com.alamofire.serialization.response.error.data=,NSUnderlyingError=0x7a81aa80 {错误 Domain=com.alamofire.error.serialization.response Code=-1016 "请求 失败:不可接受的内容类型:文本/纯文本” UserInfo={com.alamofire.serialization.response.error.response= { URL: https:///mobile/v1/document/get } { 状态码:400,标题{ "缓存控制" = "无缓存,私有"; 连接=“保持活动”; “内容类型”=“文本/纯文本;字符集=UTF-8”; 日期 =“2016 年 5 月 29 日星期日 20:31:44 GMT”; 服务器 = "nginx/1.4.6 (Ubuntu)"; "Strict-Transport-Security" = "max-age=2592000; includeSubDomains"; “传输编码” = 身份; "X-异常类" = "PM\PFTAPIBundle\Exception\MissingAPIParameterException"; "X-Exception-Message" = "缺少参数:'reference'"; “X-Frame-Options”=SAMEORIGIN; “X-处理时间”=“906.5ms”; } }, NSErrorFailingURLKey=https:///api/mobile/v1/document/get, NSLocalizedDescription=请求失败:不可接受的内容类型: 文本/纯文本,com.alamofire.serialization.response.error.data=}}} 请求失败:错误请求(400)
- (void)postResource:(NSString*)resource queryString:(NSDictionary*)queryString withCompletionHander:(CompletionHandlerBlock)completionHandler
{
NSString *qs = [DictionaryUtils convertDictToJSONString:queryString];
// self.sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
// self.sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];//[AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
// [self.sessionManager.requestSerializer setValue:[NSString stringWithFormat:@"PLSID %@",sessionID] forHTTPHeaderField:@"Authorization"];
resource = [[self.sessionManager.baseURL URLByAppendingPathComponent:@"document/get"] absoluteString];
NSURL *base = [NSURL URLWithString:resource];
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:base
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:60.0];
[theRequest setHTTPMethod:@"POST"];
[theRequest setValue:mACCEPTVALUE forHTTPHeaderField:mCONTENTTYPELABEL];
if ([[[UserDetails sharedInstance]getUserDetails]objectForKey:mSESSIONIDKEY]) {
NSString *headerField = [NSString stringWithFormat:@"%@ %@",mSOURCEPLSID,sessionID];
[theRequest setValue:headerField forHTTPHeaderField:mSOURCEIDENTIFIERHEADER];
}
if(qs != nil) {
[theRequest setHTTPBody:[qs dataUsingEncoding:NSUTF8StringEncoding]];
}
NSURLSessionDataTask *dataTask = [self.sessionManager dataTaskWithRequest:theRequest completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
//
NSLog(@"responseObject %@", responseObject);
NSLog(@"%@ \n%@",error, [error localizedDescription]); //{Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={_kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4}}}
}];
[dataTask resume];
}
当我使用邮递员测试 api 并将 Body 中的参数作为 raw 数据 {"reference":{"Id":"User","documentId":"56e0"}} [注意:不在 x-www-form-urlencoded 或form-data]。 It works and getting response with data.
【问题讨论】:
-
可以看到postman截图显示请求是text/json,而不是text/plain。
-
@Avi 谢谢,但我正在设置内容类型 [theRequest setValue:mACCEPTVALUE forHTTPHeaderField:mCONTENTTYPELABEL];其中 mACCEPTValUE 是 text/json
-
所以您的问题实际上是如何让 AF 以
text/json发送您的请求,因为您发布的错误清楚地表明它不是。 -
@Avi 是的,Avi。我将参数 {"reference":{"sheetId":"User","documentId":"56e02ac1f045d90f508b45fb"}} 作为原始数据传递
-
我知道哪里出了问题。错误的不是请求,而是响应。您期待 JSON 响应,但收到 400 响应,其中包含解释错误的文本。如果你解码返回的数据,你会得到
HTTP 400 Missing parameter: 'reference'。
标签: ios objective-c iphone serialization afnetworking