【问题标题】:Golang / Gin-gonic : Force POST headers to JSONGolang / Gin-gonic:强制 POST 标头为 JSON
【发布时间】:2015-08-22 16:21:09
【问题描述】:

我正在使用 Gin-gonic 创建 API。所有请求,无论是 GET 还是 POST 都将采用 JSON 格式。

我有一个运行良好的 API 调用,但我必须通过 cURL -H "Accept: application/json" -H "Content-type: application/json" 添加这些标头,否则 POST 无法按预期工作。

我尝试将此函数添加为中间件,但尽管它稍微更改了标题但仍然无法按预期工作

func CORSMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {

        c.Writer.Header().Set("Content-Type", "application/json")
        c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
        c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")

    }
}

工作时的标题(在 cURL 中添加标题): Accept: application/json Content-type: application/json

标头不起作用(cURL 中没有标头):Accept: */* Content-Type: application/x-www-form-urlencoded

有没有办法强制使用标题而不是要求用户提供它们?

【问题讨论】:

  • 据我所知方法Set(key, value) 只是为 existing 键设置值。方法Add(key, value) 添加新的键值对或在键存在时追加值。
  • @AlexKroll 不是真的。 HTTP 标头允许一个键有多个值,因此Add(key, value) 将值附加到现有键。
  • @JiangYD 我错了什么? src/net/http/header.go // 添加键,值对到头部。 // 它附加到与键关联的任何现有值。 func (h Header) Add(key, value string) { textproto.MIMEHeader(h).Add(key, value) }
  • @AlexKroll 是的,我的错。无论如何,这个问题与重复键无关。

标签: json curl go go-gin


【解决方案1】:

Content-type 是一个导入 HTTP 标头,让服务器决定如何解析 HTTP 正文。

有什么方法可以强制标头而不是要求用户提供它们?

很难说是或否,这取决于您的“用户”。对于 curl,它无法猜测 HTTP 正文格式并自动将 Content-Type 设置为 'application/json',因此需要指定 Content-Type。对于像jQuery这样的其他人,程序员可以在帖子jQuery.post( url [, data ] [, success ] [, dataType ] )link中设置dataType

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 2017-04-27
    • 2017-07-01
    • 2021-06-13
    • 1970-01-01
    • 2020-04-14
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多