Phoenix 路由器接受带有正斜杠字符的参数

Phoenix router accepting parameter with forward slash char

我有一个具有以下结构的 Phoenix 路由器。问题是参数“名称”可以有一个正斜杠,具体取决于项目,例如“ABC/D”

这个“/”字符被解释为不同的路由,尽管它并不存在。有什么方法可以指定正斜杠是名称的一部分而不是路由的一部分吗?

scope "/api", AppWeb do
  scope "/pricing" do
    resources("/inventory", InventoryController, param: "name") do
      get("/quote", InventoryController, :quote, as: :pricing)
    end
  end
end

这个问题与, that’s HTTP protocol question. To pass any symbol as path/query part in the URL and prevent handlers from treating it as a path and/or controlling symbol, one should url-encode关系不大

也就是说,应该在 URI 的 path/query 部分将正斜杠编码为 %2F。下面的代码显示了路由器如何处理它。

#                                                 ⇓⇓
iex||1 ▸ URI.decode("https://google.com/?foo=bar%2Fbaz") 
"https://google.com/?foo=bar/baz"