Restkit发送Get请求而不是Post

发布于 2024-12-29 04:41:52 字数 1728 浏览 1 评论 0原文

我刚刚开始使用 Restkit,并尝试发送常规 POST 请求“serverUrl/account/authenticate.xml?OPTIONS”以获取 XML 形式的响应。这是我用来调用 URL 的代码:

 -(void) function{

    // OBJECT MANAGER
    RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:serverUrl];
    [manager.router routeClass:[CBUser class] toResourcePath:@"/account/authenticate" forMethod:RKRequestMethodPOST];


    // OBJECT MAPPING
    RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[CBUser class]];
    mapping = [manager.mappingProvider objectMappingForKeyPath:@"user"];
    [mapping mapKeyPath:@"id" toAttribute:@"userId"];

    [manager loadObjectsAtResourcePath:str objectMapping:mapping delegate:self];
}


// DELEGATE
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {  
    CBUser* user = [objects objectAtIndex:0];  
    NSLog(@"Loaded Contact ID #%@ -> Firstname: %@, Lastname: %@", user.userId, user.firstname, user.lastname);  
}  

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {  
    NSLog(@"Encountered an error: %@", error); 
}

查看服务器日志,即使我使用“RKRequestMethodPOST”选项,它似乎也收到了 GET 请求而不是 POST。

这是我的日志中的错误:

Started GET "/account/authenticate.xml?commit=Login&authenticity_token=iPhone&user%5Bpassword=XXXXX&user%5Bemail=XXXXXXX%5D&user%5Bdevice_token=XXXXXXX" for 192.168.106.30 at 2012-01-25 19:20:03 -0800

AbstractController::ActionNotFound (The action 'show' could not be found for AccountController):


Rendered /Users/Guillaume/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.0.9/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb within rescues/layout (1.2ms)

我缺少什么?

I'm just starting to use Restkit and am trying to send a regular POST request "serverUrl/account/authenticate.xml?OPTIONS" to get a response as XML. This is the code I use to call the URL:

 -(void) function{

    // OBJECT MANAGER
    RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:serverUrl];
    [manager.router routeClass:[CBUser class] toResourcePath:@"/account/authenticate" forMethod:RKRequestMethodPOST];


    // OBJECT MAPPING
    RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[CBUser class]];
    mapping = [manager.mappingProvider objectMappingForKeyPath:@"user"];
    [mapping mapKeyPath:@"id" toAttribute:@"userId"];

    [manager loadObjectsAtResourcePath:str objectMapping:mapping delegate:self];
}


// DELEGATE
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {  
    CBUser* user = [objects objectAtIndex:0];  
    NSLog(@"Loaded Contact ID #%@ -> Firstname: %@, Lastname: %@", user.userId, user.firstname, user.lastname);  
}  

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {  
    NSLog(@"Encountered an error: %@", error); 
}

Looking at the server log it seems it receives a GET request instead of a POST even though I'm using the "RKRequestMethodPOST" option.

Here is my error form my logs:

Started GET "/account/authenticate.xml?commit=Login&authenticity_token=iPhone&user%5Bpassword=XXXXX&user%5Bemail=XXXXXXX%5D&user%5Bdevice_token=XXXXXXX" for 192.168.106.30 at 2012-01-25 19:20:03 -0800

AbstractController::ActionNotFound (The action 'show' could not be found for AccountController):


Rendered /Users/Guillaume/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.0.9/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb within rescues/layout (1.2ms)

What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哀由 2025-01-05 04:41:52

希望我的应用程序的这段代码片段能有所帮助。您设置您的映射,例如在您的委托中。请注意“forMethod”

    RKObjectRouter *router;

    RKObjectMapping* createAccountSerializationMapping = [RKObjectMapping mappingForClass:[Cr    eateAccount class]];
    [createAccountSerializationMapping mapAttributes:@"email", @"pwd", @"uname", nil];

    [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:createAccountSerializationMapping forClass:[CreateAccount class]];

    router = [RKObjectRouter new] ;
    [router routeClass:[CreateAccount class] toResourcePath:@"/registration/rest/users/create_account" forMethod:RKRequestMethodPOST];

    [RKObjectManager sharedManager].router = router; 

,然后当您想要发布对象时

    [[RKObjectManager sharedManager] postObject:user delegate:self];

Hopefully this code snippet of my app will help. You setup your mappings, say in your delegate. Note the "forMethod"

    RKObjectRouter *router;

    RKObjectMapping* createAccountSerializationMapping = [RKObjectMapping mappingForClass:[Cr    eateAccount class]];
    [createAccountSerializationMapping mapAttributes:@"email", @"pwd", @"uname", nil];

    [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:createAccountSerializationMapping forClass:[CreateAccount class]];

    router = [RKObjectRouter new] ;
    [router routeClass:[CreateAccount class] toResourcePath:@"/registration/rest/users/create_account" forMethod:RKRequestMethodPOST];

    [RKObjectManager sharedManager].router = router; 

and then later, when you want to post an object

    [[RKObjectManager sharedManager] postObject:user delegate:self];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文