Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将方法发布到Rails API_Ios_Ruby On Rails_Ruby_Xcode_Post - Fatal编程技术网

Ios 将方法发布到Rails API

Ios 将方法发布到Rails API,ios,ruby-on-rails,ruby,xcode,post,Ios,Ruby On Rails,Ruby,Xcode,Post,如何将POST消息发送到Rails应用程序(从应用程序外部) 我已经找了一个星期的答案了,这已经很烦人了 我正在尝试从iOS应用程序向我的rails应用程序发送POST方法。然而什么也没有发生。我没有得到答复,什么也做不了。我连一个错误都没有 下面是我的标准Objective-c代码(即使您不熟悉它,它也非常具有描述性): 然而,GET方法就像一个符咒 NSString* tokenString = @"122131hjrandom32fg1jh3f134"; NSString* cle

如何将POST消息发送到Rails应用程序(从应用程序外部)

我已经找了一个星期的答案了,这已经很烦人了

我正在尝试从iOS应用程序向我的rails应用程序发送POST方法。然而什么也没有发生。我没有得到答复,什么也做不了。我连一个错误都没有

下面是我的标准Objective-c代码(即使您不熟悉它,它也非常具有描述性):

然而,GET方法就像一个符咒

NSString* tokenString = @"122131hjrandom32fg1jh3f134";
    NSString* cleanTokenString = [tokenString stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSString* userNameString = @"James";
    NSString* urlString = [NSString stringWithFormat:@"http://somethingurl.herokuapp.com/app_send_message?my_token=%@&recipient_name=%@&sender_message=hello", cleanTokenString, userNameString];
     //NSString* urlString = [NSString stringWithFormat:@"http://fast-peak-2994.herokuapp.com/app_send_message?my_token=%@", cleanTokenString];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"GET"];

NSURLResponse *requestResponse;
NSData *requestHandler = [NSURLConnection sendSynchronousRequest:request returningResponse:&requestResponse error:nil];

NSString *requestReply = [[NSString alloc] initWithBytes:[requestHandler bytes] length:[requestHandler length] encoding:NSASCIIStringEncoding];
NSLog(@"requestReply: %@", requestReply);
下面是我的rails代码,它稍微简化了一些,以说明这一点:

config/routes.rb

Rails.application.routes.draw do
  resources :blocks
  resources :users
  resources :messages

  root to: 'messages#index'

  match '/app_send_message' => 'messages#app_get_send_message', via: :get
  match '/app_send_message' => 'messages#app_post_send_message', via: :post
....
消息\u controller.rb

def app_get_send_message
   render text: 'this is get method'
end

def app_post_send_message
   render text: 'this is post method'
end

在我看来,您应该禁用CSRF令牌验证。这通常可以防止Rails应用程序从自动脚本发送伪造的post请求。当然,当使用Rails作为API提供程序时,这并不能正常工作


检查应用程序控制器中的protect_from_force_伪造调用,并将其删除。这里有更多详细信息:

您可能应该看看处理大量API相关问题的。它特别提到了默认Rails安装中的
protect\u from\u fackery
问题。

我尝试过,但仍然没有得到响应。响应本身并不是那么重要,我只是想知道是否调用了app_post_send_message操作。您可以通过执行Rails.logger.info“我被调用”之类的操作来测试这一点。这将显示在Webbrick输出(如果在交互模式下运行)或development.log或production.log(取决于您的环境)中。
def app_get_send_message
   render text: 'this is get method'
end

def app_post_send_message
   render text: 'this is post method'
end