Разрешить больше, чем тип содержимого: application / json in gorilla - PullRequest
0 голосов
/ 05 июня 2019

Используя превосходный Gorilla mux, у меня есть специальный обработчик для запросов API, использующий application / json в качестве типа контента:

apiRouter := router.PathPrefix("/api").Headers("Content-Type", "application/json").Subrouter()

Однако некоторым пользователям нравится предоставлять больше, чем просто эту строку, то есть application / json;кодировка = UTF-8.Когда это значение заголовка установлено, обработчик возвращает 404.

Как лучше всего справиться с этим, разрешив json и любые спецификации кодировки?

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Вот как я это сделал:

apiRouter := router.PathPrefix("/api").HeadersRegexp("Content-Type", fmt.Sprintf("%s.*", MIMEApplicationJSON)).Subrouter()

Помните, что вы можете применять маршрутизацию в фактической конечной точке, а не на корневом уровне. Для запросов GET нет необходимости указывать Content-Type, но для POST вы должны проверить его.

0 голосов
/ 05 июня 2019

Я думаю, что это хороший вариант использования HeadersRegexp.

С Go Doc :

Также существует поддержка регулярных выражений для сопоставления заголовков в маршруте. Например, мы могли бы сделать:

r.HeadersRegexp("Content-Type", "application/(text|json)")

... и маршрут будет соответствовать обоим запросам с типом содержимого application/json, а также application/text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...