ruby-on-rails - 如何仅在 Rails 2 应用程序中访问请求 header ?

标签 ruby-on-rails

Rails 提供了一个 request.headers 方法,该方法返回所有 header 和大量额外的非 header 信息...我只想访问请求 header ,我该怎么做?

问候

最佳答案

您基本上必须隔离所有以 HTTP_CONTENT_ 为前缀的环境条目,它们对应于您的 HTTP header ,例如:

# CONTENT_LENGTH -> Content-Length
# HTTP_COOKIE -> Cookie
# HTTP_USER_AGENT -> User-Agent
@headers |= request.env.inject({}) { |h, (k, v)|
  if k =~ /^(HTTP|CONTENT)_/ then
    h[k.sub(/^HTTP_/, '').dasherize.gsub(/([^\-]+)/) { $1.capitalize }] = v 
  end
  h
}

或者,您可以更加严格,只查找特定 HTTP headers为了避免意外获取可能看起来像 header 但实际上无效的环境变量,例如 CONTENT_BLAHTTP_DUMMY

@headers |= %w[ CONTENT_LENGTH CONTENT_TYPE HTTP_ACCEPT
HTTP_REFERER HTTP_USER_AGENT ].inject({}) { |h, k|
  if v = request.env[k] then
    h[k.sub(/^HTTP_/, '').dasherize.gsub(/([^\-]+)/) { $1.capitalize }] = v 
  end
  h
}

查看 actionpack/lib/action_controller/request.rb,了解它们如何梳理环境以提取请求 header 。

关于ruby-on-rails - 如何仅在 Rails 2 应用程序中访问请求 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2349394/

相关文章:

ruby-on-rails - 如何在 Rails (3) 中用回形针裁剪特定区域?

ruby-on-rails - rails 3 : Validating Model uniqueness of Time within a Time Range

mysql - Ruby on Rails/Activerecord mySQL 建模

ruby-on-rails - capybara 断言元素的属性

ruby-on-rails - 如何将验证与模型分开

ruby-on-rails - 如何在 Rails 迁移中添加一些插入?

ruby-on-rails - Rails - 设计,如何禁用一些默认路由?

ruby-on-rails - 通过railsner中的link_to将id传递给 Controller

ruby-on-rails - 到 'ws://example.com/cable' 的 WebSocket 连接失败 : Unexpected response code: 404

ruby-on-rails - 为什么直接更改迁移文件不会更改架构文件?