我要求任何网址:www.servername.com/api/foo/bar/parameters
其中:
api
是静态的foo
是控制器bar
是行动parameters
是params 映射到api
目录
( api目录位于控制器目录)
为了实现这一点,我做了以下代码,但它没有工作。有什么建议吗?
namespace :api do
match "/api/:controller(/:action(/*params))", via: [:get, :post]
end
答案 0 :(得分:1)
我不知道有什么问题:
get '/api/:controller/(:action(/*path))'
将产生以下路线:
GET /api/:controller(/:action(/*path))(.:format):controller#:action
高级动态规则是(见docs):
get ':controller/(:action(/*path))', controller: /api\/[^\/]+/
导致:
api GET:controller(/:action(/ * path))(:format)(? - mix:api / [^ /] +)#:action
答案 1 :(得分:0)
你应该有类似下面的内容,如果你需要稍后更改,最好有版本,所以你以后可能会有v2:
scope 'api', module: :api, constraints: { format: :json } do
namespace :v1 do
match ":controller(/:action(/*params))", via: [:get, :post]
end
end
请注意,api
在匹配路由部分中不存在,仅在范围内
尝试运行rake routes
检查您的路线的样子。
答案 2 :(得分:0)
如果您在controllers文件夹中有文件夹api,则会输入:
namespace :api do
match ":controller(/:action(/*params))", via: [:get, :post]
end
你把/ api / in url导致路由指向:
www.servername.com/api/api/foo/bar/parameters
重要提示:Match deprecation
答案 3 :(得分:0)
你可以试试这个。
namespace :api do
match ':controller/:action/*params', via: [:get, :post]
end