2012-07-06 53 views
4

我正在嘗試爲我的restkit調用設置標題值。但是,這些似乎並不奏效。如何在Restkit中設置標題值

我想設置Content-TypeAccept頭來application/json

任何想法,問題出在哪裏?

謝謝!

RKObjectManager *objectManager = [RKObjectManager sharedManager]; 
[[objectManager client] setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[[objectManager client] setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

RKURL *URL = [RKURL URLWithBaseURL:[objectManager baseURL] resourcePath:@"https://stackoverflow.com/users/sign_in.json" queryParameters:params]; 

[objectManager loadObjectsAtResourcePath:[NSString stringWithFormat:@"%@?%@", [URL resourcePath], [URL query]] delegate:self]; 

回答

9

我不認爲這是太明顯了,雖然它是在documentation(我還沒有嘗試過TBH),但是在對象管理器有一個serializationMIMEType財產。還有已定義的常量JSON,因此您的代碼可能會是這樣的:

objectManager.serializationMIMEType = RKMIMETypeJSON; 

根據該文檔,應用程序/ JSON是接受反正默認的,但可以通過acceptMIMEType屬性來指定。

+0

只是要提:這僅僅是接受而不是Content-Type – 2016-03-15 08:29:24

3

你有這個選項

[kGlobalObjectManager() loadObjectsAtResourcePath: @"path" usingBlock: ^(RKObjectLoader *loader) { 
    NSDictionary* dictionary = [NSDictionary dictionaryWithObject: @"VALUE" forKey: @"HEADER NAME"]; 
    loader.additionalHTTPHeaders = dictionary; 
    loader.delegate = self; 
}]; 

更具體到你的問題,你有[RKObjectManager setAcceptMIMEType:]

0

在類RKObjectManager存在方法

** 
This method is the `RKObjectManager` analog for the method of the same name on `AFHTTPClient`. 
*/ 
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method 
             path:(NSString *)path 
           parameters:(NSDictionary *)parameters 
{ 
    NSMutableURLRequest* request; 
    if (parameters && !([method isEqualToString:@"GET"] || [method isEqualToString:@"HEAD"] || [method isEqualToString:@"DELETE"])) { 
     // NOTE: If the HTTP client has been subclasses, then the developer may be trying to perform signing on the request 
     NSDictionary *parametersForClient = [self.HTTPClient isMemberOfClass:[AFHTTPClient class]] ? nil : parameters; 
     request = [self.HTTPClient requestWithMethod:method path:path parameters:parametersForClient]; 

     NSError *error = nil; 
     NSString *charset = (__bridge NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.HTTPClient.stringEncoding)); 
     [request setValue:[NSString stringWithFormat:@"%@; charset=%@", self.requestSerializationMIMEType, charset] forHTTPHeaderField:@"Content-Type"]; 
     NSData *requestBody = [RKMIMETypeSerialization dataFromObject:parameters MIMEType:self.requestSerializationMIMEType error:&error]; 
     [request setHTTPBody:requestBody]; 
    } else { 
     request = [self.HTTPClient requestWithMethod:method path:path parameters:parameters]; 
    } 

    return request; 
} 

這裏存在替代內容類型,你可以早配置RestKit時設置爲

[[[RKObjectManager sharedManager] HTTPClient] setDefaultHeader:@"Content-Type" value:@"application/json"]; 

對於這種將工作,我發現(不漂亮,但工程)的解決方案,我做了

@interface RKObjectManager (BBContentType) 

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method 
             path:(NSString *)path 
           parameters:(NSDictionary *)parameters; 

@end 

@implementation RKObjectManager (BBContentType) 

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method 
             path:(NSString *)path 
           parameters:(NSDictionary *)parameters 
{ 
    NSMutableURLRequest* request; 
    if (parameters && !([method isEqualToString:@"GET"] || [method isEqualToString:@"HEAD"] || [method isEqualToString:@"DELETE"])) { 
     // NOTE: If the HTTP client has been subclasses, then the developer may be trying to perform signing on the request 
     NSDictionary *parametersForClient = [self.HTTPClient isMemberOfClass:[AFHTTPClient class]] ? nil : parameters; 
     request = [self.HTTPClient requestWithMethod:method path:path parameters:parametersForClient]; 
     NSError *error = nil; 
     NSData *requestBody = [RKMIMETypeSerialization dataFromObject:parameters MIMEType:self.requestSerializationMIMEType error:&error]; 
     [request setHTTPBody:requestBody]; 
    } else { 
     request = [self.HTTPClient requestWithMethod:method path:path parameters:parameters]; 
    } 

    return request; 
} 
@end 

類我只是切兩線

NSString *charset = (__bridge NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.HTTPClient.stringEncoding)); 
[request setValue:[NSString stringWithFormat:@"%@; charset=%@", self.requestSerializationMIMEType, charset] forHTTPHeaderField:@"Content-Type"]; 
相關問題