我正在rails 4中构建一个API。在调用一个动作之前,我首先尝试检查http头中是否存在一个属性。有没有办法做到这一点,而不是检查控制器的所有动作中的每一个。 rails文档提到了类似
的内容constraints(lambda { |req| req.env["HTTP_CUSTOM_HEADER"] =~ /value/ }) do
#controller, action mapping
end
但我仍然想让用户使用我的API反馈。比如发送带有消息的json:missing the custom attribute in the header
答案 0 :(得分:4)
您可以将before_action
添加到控制器并检查标题属性,例如:
class SomeController < ApplicationController
before_action :render_message, unless: :check_header
def check_header
request.env["HTTP_CUSTOM_HEADER"] =~ /foo/
end
def render_message
render json: { message: "missing the custom attribute in the header" }
end
end
如果check_attribute
过滤器返回nil
,则render_message
操作会呈现所需的消息。
答案 1 :(得分:1)
答案 2 :(得分:0)
如果标头存在作为一种认证机制,那么没有必要点击后端,尝试在反向代理端提前避免它:
nginx.conf
server {
location / {
if ($http_x_custom_header) {
return 200 'missing the custom attribute in the header';
}
proxy_pass...
}
}