Не удается получить тело сообщения формы из контекста Go gin

Я обновил gin-gonic и хочу использовать его для сохранения формы.

Вот мой код:

import (
    "fmt"
    "github.com/gin-gonic/contrib/sessions"
    "github.com/gin-gonic/gin"
...


func HandlePost(c *gin.Context) {
    userId, userName := getUserId(c)

    title := c.PostForm("title")
    content := c.PostForm("content")

    fmt.Println("userId is:", userId) //ok
    fmt.Println("userName is: ", userName) //ok
    fmt.Println("title is:", title) //empty
    fmt.Println("content is: ", content) //empty

...

Я использую Postman для отправки формы, например:

введите здесь описание изображения

Я не получаю никаких ошибок, но полученные поля формы пусты. Итак, интересно, что здесь может быть не так и как это исправить?

Обновление: вот как я реализовал getUserId:

func getUserId(c *gin.Context) (int, string) {
    var user []model.User
    session := sessions.Default(c)
    userEmail := session.Get("user-id").(string)
    if userEmail == "" {
        fmt.Println("userEmail NOT found")
    } else {
        err := shared.Dbmap.Select(&user, "SELECT * FROM user WHERE email = ? LIMIT 1", userEmail)
        if err != nil {
            log.Panic(err)
        }
    }
    return user[0].Id, user[0].UserName
}

person Karlom    schedule 17.07.2017    source источник
comment
Как вы реализовали getUserId? Я предполагаю, что когда вызывается функция getUserId, она считывает все тело запроса до EOF, поэтому при доступе к названию и содержимому вы получаете пустое значение.   -  person putu    schedule 17.07.2017
comment
@putu, я добавил к вопросу функцию getUserId. Но даже если я закомментирую вызов getUserId, поля формы все равно пусты.   -  person Karlom    schedule 17.07.2017
comment
Итак, мое первоначальное предположение было неверным, поскольку в getUserId вы не читаете тело запроса. Что, если вы попытаетесь прочитать форму с помощью Context.MultipartForm() (* multipart.Form, ошибка) и обратите внимание на error? Вы также можете попытаться просмотреть запрос Postman, чтобы увидеть что именно было отправлено на сервер.   -  person putu    schedule 17.07.2017
comment
Что ж, я следил за официальной документацией джина, чтобы прочитать сообщение формы. Как я могу использовать c.MultipartForm вместо этого?   -  person Karlom    schedule 17.07.2017
comment
Добавьте form, err := c.MultipartForm() перед title := c.PostForm("title"). Обратите внимание на содержание и ошибку fmt.Printf("%+v, %+v\n", form, err). Если ошибки не было, вы можете прочитать значение из multipart.Form.Value.   -  person putu    schedule 17.07.2017
comment
Я сделал. И теперь я получаю <nil>, invalid URL escape "%\x00\x00"   -  person Karlom    schedule 17.07.2017
comment
Теперь, по крайней мере, мы понимаем, почему вы получили пустое значение. Что делать, если вы удалите поле file в запросе почтальона? Пожалуйста, также проверьте запрос почтальона, чтобы увидеть, что именно было отправлено на сервер. Сообщение об ошибке указывает, что запрос недействителен.   -  person putu    schedule 17.07.2017
comment
Верно. удаление файла из поста не имеет никакого эффекта. Я все еще изо всех сил пытаюсь проверить почту. Можете ли вы дать мне эквивалент curl (включая cookie), чтобы я мог обойти Postman?   -  person Karlom    schedule 17.07.2017
comment
Вы можете получить доступ и проверить запрос через историю. Для cURL и cookie: https://stackoverflow.com/questions/15995919/curl-how-to-send-cookies-via-command-line   -  person putu    schedule 17.07.2017
comment
Святая мольба! Когда я публикую с помощью curl, значения формы извлекаются. Большое спасибо putu за решение этой головоломки! Ответь и я приму. Я должен бросить Почтальона! Вот завиток: curl -X POST -v --cookie "mycookename=somelonggibberish" -F 'title=mytitle' -F 'content=mycontent' http://127.0.0.1:8080/api/post   -  person Karlom    schedule 17.07.2017