我试图获取这样的网址:
http://myweb/api/1/1/NJUimQw0bsJgv%2FqjfpMzCl5CeeL%2BnCQr61UVLBcJCNA%3D%0A
但是,日志文件显示:
ActionController::RoutingError (No route matches [GET] "/api/1/1/NJUimQw0bsJgv/qjfpMzCl5CeeL+nCQr61UVLBcJCNA=%0A"):
似乎rails自动解码URI。我该如何禁用它?
在我的route.rb中:
scope '/api' do
get '/:aid/:uid/:token' => 'my_apis#show'
end
我的网站是rails 4.2.1,正在使用nginx。
答案 0 :(得分:2)
您的令牌包含正斜杠(' /')导致问题,修改将解决问题的路线
scope '/api' do
get '/:aid/:uid/:token' => 'my_apis#show', constraints: { token: /.*/ }
end
segment-constraints使用正则表达式限制动态细分的格式,在您的情况下,动态细分为token
。 Regexp /.*/
匹配每个字符(包括正斜杠/
)
总的来说,它告诉我们uuid
之后的每个字符都是token
。所以rails在令牌中也包含/