2

我正在使用 Beego 框架来构建一个 Web 应用程序,并且我正在尝试向它传递一些 JSON 编码数据。大致来说,这就是我所拥有的:

import (
"github.com/astaxie/beego"
)

type LoginController struct {
beego.Controller
}

func (this *LoginController) Post() {
  request := this.Ctx.Request
  length := request.ContentLength
  p := make([]byte, length)
  bytesRead, err := this.Ctx.Request.Body.Read(p)
  if err == nil{
    //blah
  } else {
    //tell me the length, bytes read, and error
  }
}

根据本教程,上述内容应该可以正常工作(tm)。

我的问题是:bytesRead, err := this.Ctx.Request.Body.Read(p)正在返回读取的 0 字节,而err.Error()is EOF.

然而request.ContentLength, 是一个合理的字节数(19 个或更多,取决于我输入的数据)。

我无法弄清楚为什么请求看起来有一些长度,但会在Read. 有任何想法吗?

4

1 回答 1

4

如果您尝试在 Beego 中访问 JSON 有效负载,您需要调用

this.Ctx.Input.RequestBody

这将返回已发送有效负载的 []byte 数组。然后,您可以将其传递给如下函数:

var datapoint Datapoint
json.Unmarshal(this.Ctx.Input.RequestBody, &datapoint)

其中 datapoint 是您尝试将数据解组到的结构。

于 2014-11-29T15:21:48.003 回答