【发布时间】:2014-11-14 18:11:44
【问题描述】:
任何发送到 Rails 控制器的请求都会得到一个 HTTP_ 前缀,因为它是由 ActionDispatch::HTTP.Headers 附加的。有没有办法防止这种情况(不覆盖ActionDispatch::HTTP,这样我就可以按原样使用我的自定义标题并将它们用作headers.@env 的键?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 actiondispatch
任何发送到 Rails 控制器的请求都会得到一个 HTTP_ 前缀,因为它是由 ActionDispatch::HTTP.Headers 附加的。有没有办法防止这种情况(不覆盖ActionDispatch::HTTP,这样我就可以按原样使用我的自定义标题并将它们用作headers.@env 的键?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 actiondispatch
不,这是不可能的。这就是 ActionDispatch::Http::Headers 类被设计用来规范化标头的方式。
private
def env_name(key)
key = key.to_s
if key =~ HTTP_HEADER
key = key.upcase.tr('-', '_')
key = "HTTP_" + key unless CGI_VARIABLES.include?(key)
end
key
end
您仍然可以使用自定义标题。您只需将它们引用为HTTP_X_FOO 而不是x-foo。
【讨论】:
HTTP_X_FOO 来获取该标头,并且我不得不在将其传递为时将其用作键一个哈希。目的是避免这样做。