有没有办法在葡萄上修改或发送自定义标题?

时间:2012-07-17 10:00:32

标签: ruby goliath grape-api

我正在使用歌利亚和葡萄。在我的巨人服务器上,它会像葡萄api一样调用葡萄api:

when '/posts' then FrameworksAPI::API.call(env)

在我的葡萄api课上,我的方法就像这样简单:

get '/:id' do
 Post.find(params[:id])
end

我想修改标题 - 特别是'Content-Length'但不确定如何。

我还想问一个额外的问题。如何在方法GET返回结果之前创建回调/过滤器我想修改结果。

2 个答案:

答案 0 :(得分:6)

Grape现在有几个版本的header助手。

header 'Content-Length`, 42.to_s

关于修改正文的第二个问题,请尝试在API级别使用after do ...

答案 1 :(得分:0)

从FrameworksAPI :: API.call(env)方法返回的是一个三元组[status_code,headers,body]。所以,不要只是从你的案例中返回,你会做类似的事情:

when '/posts' then
  status, headers, body = FrameworksAPI::API.call(env)
  headers['whatever'] = blah
  [status, headers, body]

你也可以改变身体,因为身体可能是阵列,所以要小心。

还有一个由Goliath提供的Content-Length中间件。默认情况下会加载Content-Length,但如果设置自定义Content-Length,它将优先。在设置内容长度后,请注意其他中间件(如格式设置)不会更改正文。