【问题标题】:Phoenix Framework: How to Route Custom Media Type?Phoenix 框架:如何路由自定义媒体类型?
【发布时间】:2015-12-23 10:38:48
【问题描述】:

在 Phoenix 框架中,如何在 Accepts 中路由自定义媒体类型?

Phoenix's own code comments 表示以下是所有必要的——再加上重新编译的 deps,尽管我不知道对此的需求。但是,这似乎不起作用:

config.exs:

[…]

config :plug, :mimes, %{
  "application/vnd.api+json" => ["json-api"]
}

router.ex:

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

[…]

scope "/", SomeApp do
  pipe_through :api

  […]

some_test.ex:

setup do
  conn = conn() |> put_req_header("accept", "application/vnd.api+json")
  {:ok, conn: conn}
end

所有测试的请求(使用设置中的 conn)都会收到 HTTP 406 响应。

【问题讨论】:

  • 您在配置中映射"api-json",但您将"json-api" 传递给您的接受插件。问题中的错字或代码中的错字?这似乎是可能的罪魁祸首
  • @ChrisMcCord 感谢您指出这一点,恐怕只是问题中的一个错字,即我测试的代码没有这个问题,仍然无法正常工作。更正了问题。
  • 你能指定“似乎不起作用吗?”。什么不工作?你期待什么,你得到什么?另外,请确保您的依赖项已重新编译,rm -rf _build 如果有疑问。
  • 对不起,我写的真的很糟糕。我应该说(并且已经编辑 Q 现在说)是执行上述操作会导致 406。

标签: http-headers url-routing mime-types elixir phoenix-framework


【解决方案1】:

事实证明以下内容是不够的:

% touch deps/plug/mix.exs
% mix deps.compile plug
% mix clean

相反,正如@josé-valim 在问题的 cmets 中所建议的那样,删除整个 _build 目录就可以了。来回折腾了几次才确定,每次都只摸和deps.compiled,不喜,每次去掉_build,喜。

【讨论】:

  • 谢谢。我花了很长时间试图弄清楚如何使用 ja_serializer 运行测试。
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
相关资源
最近更新 更多