为什么我的 rails 会自动解码 URL?我怎样才能阻止它?

Why does my rails automatically decode URL? How can I stop it?

我试图像这样获取 URL:

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。

您的令牌包含导致问题的正斜杠('/'),修改路由将解决问题

scope '/api' do
  get '/:aid/:uid/:token' => 'my_apis#show', constraints: { token: /.*/ }
end

segment-constraints 使用正则表达式限制动态段的格式,在您的情况下,动态段是 token。正则表达式 /.*/ 匹配每个字符(包括正斜杠 /

总的来说,它告诉 rails uuid 之后的每个字符都是 token。所以 rails 在令牌中也包含 /