我正在尝试将数据发布到某个 controller#action 对,但我的应用程序在 POST(但不是 GET)上重定向我,我不知道为什么.
I'm trying to post data to a certain controller#action pair, but my app redirects me on POST (but not GET), and I can't figure out why.
我用一种方法构建了一个简单的控制器:
I built a bare-bones controller with one method:
class NavigationsController < ApplicationController def foo render :text => 'in foo' end end我的路由文件只有一个规则:
My routing file has only one rule:
map.connect ':controller/:action/:id'这是我 GET 和 POST 时的结果:
Here's my result when I GET and POST, though:
$ curl localhost:3000/navigations/foo/1 in foo $ curl -d 'a=b' localhost:3000/navigations/foo/1 <html><body>You are being <a href="localhost:3000/">redirected</a>.</body></html>规格:rails 2.3.8,ruby 1.8.7
推荐答案关闭protect_from_forgery.
注释掉(或删除)ApplicationController 中的protect_from_forgery.
Commenting out (or delete) protect_from_forgery in ApplicationController.
class ApplicationController < ActionController::Base #protect_from_forgery # See ActionController::RequestForgeryProtection for details # ... end对于一个或多个控制器
将 skip_before_filter :verify_authenticity_token 添加到控制器声明中.
For one or more controllers
Add skip_before_filter :verify_authenticity_token to the controller declaration.
class NavsController < ApplicationController skip_before_filter :verify_authenticity_token # ... end对于一项或多项操作
为上述 skip_before_filter 或 protect_from_forgery 命令添加一个 :except 选项.
For one or more actions
Add an :except option to the foregoing skip_before_filter or protect_from_forgery commands.
class MyController < ApplicationController protect_from_forgery :except => :index end class MyOtherController < ApplicationController skip_before_filter :verify_authenticity_token, :except => [:create] end更多推荐
为什么 Rails 重定向我的 POST 而不是 GET?
发布评论