本文介绍了Phoenix:使用Content-Type处理POST请求正文:application/json的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望处理内容类型为application/json的传入帖子。我只是尝试返回发布的JSON作为对测试的响应,如下所示:

WebhookController控制器

pipeline :api do
  plug :accepts, ["json"]
end

def handle(conn, params) do
  {:ok, body, conn} = Plug.Conn.read_body(conn)
  json(conn, %{body: body})
end

router.ex

scope "/webhook", MyApp do
  pipe_through :api

  post "/handle", WebhookController, :handle
end

如果传入帖子的内容类型application/json,则Body为空。如果内容类型为texttext/plain,则正文包含内容。

解析传入application/json请求正文的正确方式是什么?

我使用的是Phoenix 1.2

推荐答案

当请求的Content-Type为application/json时,Plug会解析请求Body,菲尼克斯会将其作为params传递给控制器Action,因此params应该包含您想要的内容,不需要您自己读取Body并解码:

def handle(conn, params) do
  json(conn, %{body: params})
end
$ curl -XPOST -H 'Content-Type: application/json' --data-binary '{"foo": "bar"}' http://localhost:4000/handle
{"body":{"foo":"bar"}}

这篇关于Phoenix:使用Content-Type处理POST请求正文:application/json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-22 09:13