我希望在凤凰城生成一条接受 2 个查询参数的路由。
get "/items?id=:id&action=:action", ActionController, :index_by
但是我收到以下错误:
(Plug.Router.InvalidSpecError) :identifier in routes must be made of letters, numbers and underscores
我注意到当我删除第二个参数时,它可以很好地编译,所以我猜这与分隔符有关,&
分离查询字符串中的参数。
有没有另一种方法可以指定多个参数来区分路由?
路由定义主要用于"干净的URL",因为它与请求路径匹配(没有查询字符串(。
考虑到这一点,您可以像这样定义路线
get("item/:id/:action", ActionController, :index_by)
#Or
get("/items", ActionController, :index_by)
第一个路由定义将从请求路径中捕获id
和action
,例如 GET/items/1/edit 将为您提供参数中的%{"id"=>1, "action"=>"edit"}
。
第二个将从查询字符串中捕获id
和action
。 例如,GET "/items?id=1&action=delete"
会给你%{"id"=>1, "action"=>"delete"}
在你的参数中
请注意,与第一个路由定义不同,第二个路由定义不会强制查询字符串中存在id
或action
,因此无法保证这些参数在参数中可用。