收到没有可访问数据的请求。因此,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 请求应该紧随其后。