在Ruby on Rails中访问自定义标头变量

时间:2013-11-14 07:52:35

标签: ruby-on-rails http ruby-on-rails-4

在阅读了以下问题(Authorization header in Ruby on Rails accessed with key HTTP_AUTHORIZATION instead of Authorization?)之后,我遇到了与OP类似的问题,但建议的答案似乎并没有解决我的问题。

我在调用本地托管服务器时通过Postman定义了一个自定义标头:

@Igor:我实际上使用Postman,所以我只是添加了curl代码来演示我做了什么。我想最好包含一个截图:

enter image description here

这是我的控制器中的代码,它试图读取所述标题:

def authenticate_through_header
  custom_header_value = request.headers['custom_header']
end

然而,这返回nil。另一方面,request.headers['HTTP_CUSTOM_HEADER']返回值。根据我最初链接的问题,我应该能够通过在括号[]中传递名称来获取值 - 这是在较新的Rails版本中已经更改的内容吗?

干杯: - )

更新:它还可以通过以下方式访问变量:request.headers['custom-header']。所以显然它可以用连字符替换下划线,这似乎很奇怪。

1 个答案:

答案 0 :(得分:42)

是的,Rails 4已更改。 Take a look at the Http::Headers code

现在自定义变量总是以HTTP_为前缀,变量中的 _替换为- CGI variables除外。

HTH

编辑:刚刚检查过,-变量中的_已替换为HTTP_,并且前缀为line number 91-94。在上面的链接中,选中key = key.upcase.tr('-', '_')

{{1}}