收到没有可访问数据的请求。因此,ActionDispatcher 不提取可用的参数
Receiving a request with no accessible data. ActionDispatcher, therefore, extracts no usable params
我正在通过发送到我的应用程序的选项收到 CORS POST 请求。它没有为请求设置内容类型。
它成功到达正确的控制器操作,但没有可访问的数据。如果我输入params
,我什么也摸不到。
不过,我确实发现,如果我创建了 Rack Middleware,并阅读 env['rack.input']
,我可以在请求中找到我要查找的所有数据。所以我写了这个:
env['CONTENT_TYPE'] = 'application/js'
rack_input = env['rack.input'].read
params = CGI::parse(rack_input).to_json
env['rack.input'] = StringIO.new params
env['rack.input'].rewind
status, headers, response = @app.call env
神奇的是,现在在我的控制器中,我可以键入 params
并看到 ActionDispatcher 成功地从请求中提取 key/values 并使它们在我的控制器中可访问。
这有点可疑。是否有更合适的方法来提取 OPTIONS 请求及其各自的数据?
OPTIONS 调用根本不应处理数据。这是一个预检请求,用于确定在使用 CORS 时允许使用哪些操作。
RFC:
http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7
调用将 return 使用允许的 CORS HTTP 动词,如果服务器上允许 POSTs,则 POST 请求应该紧随其后。
我正在通过发送到我的应用程序的选项收到 CORS POST 请求。它没有为请求设置内容类型。
它成功到达正确的控制器操作,但没有可访问的数据。如果我输入params
,我什么也摸不到。
不过,我确实发现,如果我创建了 Rack Middleware,并阅读 env['rack.input']
,我可以在请求中找到我要查找的所有数据。所以我写了这个:
env['CONTENT_TYPE'] = 'application/js'
rack_input = env['rack.input'].read
params = CGI::parse(rack_input).to_json
env['rack.input'] = StringIO.new params
env['rack.input'].rewind
status, headers, response = @app.call env
神奇的是,现在在我的控制器中,我可以键入 params
并看到 ActionDispatcher 成功地从请求中提取 key/values 并使它们在我的控制器中可访问。
这有点可疑。是否有更合适的方法来提取 OPTIONS 请求及其各自的数据?
OPTIONS 调用根本不应处理数据。这是一个预检请求,用于确定在使用 CORS 时允许使用哪些操作。
RFC: http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7
调用将 return 使用允许的 CORS HTTP 动词,如果服务器上允许 POSTs,则 POST 请求应该紧随其后。