使用标头渲染JSON

问题描述 投票:3回答:2

我想在我的控制器中使用以下cors标头呈现JSON:

'Access-Control-Allow-Origin' = '*'.

我试过这个:

def my_action
  render(json: some_params)
  response.headers['Access-Control-Allow-Origin'] = '*'
end

但我得到了一个AbstractController::DoubleRenderError。有没有办法用标题呈现JSON?

ruby-on-rails ruby json cors
2个回答
11
投票

渲染后无法设置标头,因为响应已发送。因此,在没有意义之后更改标题,您会收到此错误。

尝试:

def my_action
  response.headers['Access-Control-Allow-Origin'] = '*'
  render(json: some_params)
end

铁路更新5

正如问题How do you add a custom http header?中指出的那样,在rails 5之后,您应该将标题设置如下:

response.set_header('HEADER NAME', 'HEADER VALUE')

2
投票

这里的问题是您正在呈现响应然后发送标头。 发送响应后,永远不应设置标头。

render通常应该是你行动的最后一行。

def my_action
  ...
  response.headers['Access-Control-Allow-Origin'] = '*'
  render json: some_params
end
© www.soinside.com 2019 - 2024. All rights reserved.