عميل AFNetworking http لا يرسل معلمات JSON
-
12-12-2019 - |
سؤال
لقد قمت بإنشاء فئة فرعية من AFHTTPClient
وأحاول إرسال بعض معلمات JSON إلى الخادم.
ومع ذلك، يستجيب الخادم بنوع المحتوى المتوقع
{(
"text/json",
"application/json",
"text/javascript"
)}, got application/xml
وفق الأسئلة الشائعة حول شبكة AF
إذا كنت تستخدم AFHTTPClient، فقم بتعيين خاصيةparameterEncoding إلى AFJSONParameterEncoding.أي طريقة على عميل HTTP هذا مع وسيطة معلمات ستقوم الآن بتشفير الكائن الذي تم تمريره إلى سلسلة JSON وتعيين نص HTTP ورأس نوع المحتوى بشكل مناسب.
لقد فعلت ذلك هنا ولكن يبدو أن الخادم لا يتعرف على رؤوس المحتوى.هل يعرف أحد الحل المحتمل؟
هنا هي الطريقة:
- (void)getCompanyDataWithString:(NSString*)companySearchQuery
finish:(LBMarkitAPIRequestCompletionBlock)finishBlock
{
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setParameterEncoding:AFJSONParameterEncoding];
NSDictionary *params = [NSDictionary dictionaryWithObject:
companySearchQuery forKey:@"input"];
NSMutableURLRequest *searchQueryRequest = [self requestWithMethod:@"GET"
path:kMarkitCompanyURL parameters:params];
AFJSONRequestOperation *searchRequestOperation = [AFJSONRequestOperation
JSONRequestOperationWithRequest:searchQueryRequest
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json)
{
NSLog(@"Response: %@", response);
NSLog(@"JSON: %@",json);
NSMutableArray *results = [NSMutableArray array];
NSError *anError = [[NSError alloc] init];
if ([json objectForKey:@"Message"])
{
NSString *message = [json objectForKey:@"Message"];
anError = [[NSError alloc] initWithDomain:message
code:100
userInfo:nil];
}
// Need some error handling code here
for (id item in json)
{
NSString *aName = [item objectForKey:@"Name"];
NSString *aSymbol = [item objectForKey:@"Symbol"];
NSString *anExchange = [item objectForKey:@"Exchange"];
LBCompany *aCompany = [[LBCompany alloc] initWithName:aName
Symbol:aSymbol Exchange:anExchange];
[results addObject:aCompany];
}
// Need to run the passed in block after JSON
// Request Operation succeeds
finishBlock(results,anError);
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response,
NSError *error, id JSON)
{
NSLog(@"request failed: %@",[error localizedDescription]);
NSLog(@"Response: %@",response);
NSLog(@"JSON: %@",JSON);
}];
[searchRequestOperation start];
NSLog(@"JSON operation started");
}
المحلول
كانت المشكلة تتعلق بتنسيق عنوان URL.لم ألاحظ تفاصيل تنفيذ واجهة برمجة التطبيقات (API) التي جعلت إرسال معلمات الاستعلام أمرًا ضروريًا وكذلك تحديد إخراج JSON في URI.
لم تكن هناك مشاكل فيما يتعلق بشبكة AF.
لا تنتمي إلى StackOverflow