【问题标题】:Empty post params in rails when the request came from go NewRequestWithContext当请求来自 go NewRequestWithContext 时,rails 中的空帖子参数
【发布时间】:2021-08-05 15:33:28
【问题描述】:

我正在使用 rails 5 从 go 脚本获取发布请求,我有一条发布到我的函数的路线。

在 go 脚本中,我正在使用此代码进行发布请求并发送数据:

request, err := http.NewRequestWithContext(ctx, post, url, bytes.NewBuffer(data))
resp, err := client.Do(request)

在rails中,我使用这段代码来获取post请求的参数

params = params.permit!.except(:controller, :action).to_h

当我从 go 发出请求时,参数是空的 {}

但我可以通过在 rails 中查看请求原始正文中的数据:

puts request.raw_post

在铁路上:

  request.headers["Content-Type"]: 
  "text/plain; charset=utf-8" 

Go 中的数据:

data, err := json.Marshal(jsonData)

【问题讨论】:

  • 您是否在请求中提供了正确的 ContentType 标头?你能给我们一个请求正文和标头的示例吗?
  • 我已经在 go 中添加了这个:request.Header.Set("Content-Type", http.DetectContentType(data))
  • 这是否为您提供了 Rails 方面的预期内容类型?您可以通过request.headers 获取标题。我猜是不匹配,所以 rack 没有反序列化请求正文。
  • 在 rails, request.headers["Content-Type"]: "text/plain; charset=utf-8" 数据在 go : data, err := json.Marshal(jsonData)跨度>
  • 那是你的问题。您需要发送application/json。我真的不知道去,但你不能只做request.Header.Set("Content-Type", "application/json"),因为你真的知道你应该发送什么吗?

标签: ruby-on-rails go ruby-on-rails-5 http-post


【解决方案1】:

我必须在 go by do 中为请求提供正确的 ContentType 标头

request.Header.Set("Content-Type", "application/json")

它是 json,因为我正在发送 json。如果不是这样,rails 将无法理解请求正文并且将无法使用参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2020-06-06
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多