gpt4 book ai didi

ruby-on-rails - 如何确保 Rails Controller 将发布到它的数据处理为 JSON?

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:31 25 4
gpt4 key购买 nike

我正在设置一个 url 以从第三方 API 接收 webhook,但我很难按照 API 的要求验证我的 URL。 API 会将带有验证 token 的 JSON 数据发布到我的 url,但是当我看到 POST 进来时,Rails 说 Controller 正在将其作为 TEXT 而不是 JSON 进行处理,并且看起来 Rails 试图在我之前将 JSON 转换为散列 Controller 有机会与之交互。

这是发出发布请求时我看到的内容:

    Processing by WebhooksController#receive as TEXT
Parameters: {"id"=>"5bb2181f-8b7d-4ba2-80a3-072818bb5310", "type"=>"webhook.verify", "created"=>"2014-09-10T22:36:59Z", "data"=>{"token"=>"CWkrAwoPITotLOPQtaiRosOVHPKiOEyh"}, "webhook"=>{"id"=>"5bb2181f-8b7d-4ba2-80a3-072818bb5310", "type"=>"webhook.verify", "created"=>"2014-09-10T22:36:59Z", "data"=>{"token"=>"CWkrAwoPITotLOPQtaiRosOVHPKiOEyh"}}}

由于以上不是有效的 JSON,导致:

    JSON::ParserError (757: unexpected token at ''):
app/controllers/webhooks_controller.rb:24:in `receive'

我已经使用 Postman Chrome 扩展程序测试了下面的 Controller ,当发布类似于我将收到的 JSON 时,它确实成功地在响应 header 中返回了 token 。

我知道第三方 API 可能没有将内容类型设置为“application/json”,这可能会导致这种情况,但我如何确保 Rails 将数据处理为 JSON 而不是文本?

Controller :

    class WebhooksController < ApplicationController

def receive
raw_body = request.body.read
json = JSON.parse raw_body
# Return verification token only once for intitial webhook setup.
token = json['data']['token']

response.headers["token"]= token
render :nothing => true
end

end

谢谢!

最佳答案

虽然我仍然不能完全确定 rails 在这种情况下是如何工作的,但我已经找到了解决问题的方法。尽管在我的问题中发布的 Controller 代码返回了我在 Chrome Postman 扩展中寻找的结果,但它给了我一个 JSON 解析错误,我试图为其集成 webhooks 的 API。我改为使用 curl 在本地进行测试,并意识到我遇到了同样的错误。

这是在本地测试的 curl :

    curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{"id":"evt_REPLACEME"}' localhost:3000/your-webhook-path

这是我更新后的有效 Controller 代码:

    class WebhooksController < ApplicationController

def receive
token = params[:data][:token]

response.headers["token"]= token
render :text => token
end

end

不清楚应该如何为这个特定的 API 返回 token ,我不确定我是应该在 header 中返回响应还是返回 JSON 或文本。呈现文本并在标题中设置标记为我解决了这个问题。

关于ruby-on-rails - 如何确保 Rails Controller 将发布到它的数据处理为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25776250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com