所以我有一个网站,完全正常工作,一些uri编码在url中。
但是,当我尝试将url传递给chrome浏览器时:http://somewhere:3000/find/someOne?utf8=%E2%9C%93&search=someThing&choicen=no&querys={%22peopleName%22%3A%22%22%2C%22peopleGroup%22%3A%22%22%2C%22place%22%3A%22%22%2C%22pip%22%3A%22%22%2C%22hw%22%3A%22%22%2C%22somerock%22%3A%22%22%2C%22rocksomerock%22%3A%22%22%2C%22diedAt%22%3A%222016-01-01%20-%202016-12-31%22%2C%22borndAt%22%3A%22%22%2C%22taxRate%22%3A%22%22}
--它在浏览器中向我抛出一个错误:
Bad Request
bad URI `/find/someOne?utf8=%E2%9C%93&search=someThing&choicen=no&querys={%22peopleName%22%3A%22%22%2C%22peopleGroup%22%3A%22%22%2C%22place%22%3A%22%22%2C%22pip%22%3A%22%22%2C%22hw%22%3A%22%22%2C%22somerock%22%3A%22%22%2C%22rocksomerock%22%3A%22%22%2C%22diedAt%22%3A%222016-01-01%20-%202016-12-31%22%2C%22borndAt%22%3A%22%22%2C%22taxRate%22%3A%22%22}'.
WEBrick/1.3.1 (Ruby/1.9.3/2014-11-13) at somewhere.com:3000
在Rails控制台中也显示
[2016-07-04 18:11:31] ERROR bad URI
。版本:
铁路3
红宝石1.9.3
知道怎么让它工作吗?是因为uri中的
{
和}
还是因为它太长? 最佳答案
在收到请求时分析控制器中的路径,使用Rack::Utils#parse_nested_query
,请参阅:http://www.rubydoc.info/github/rack/rack/master/Rack/Utils.parse_nested_query
# config/routes.rb
get '/find/someOne/*str' => 'find#someOne'
# app/controllers/find_controller.rb
class FindController < ApplicationController
def someOne
custom_params = Rack::Utils.parse_nested_query(request.env['ORIGINAL_FULLPATH'])
querys_hash = JSON.parse(custom_params["querys"])
end
end
控制台示例:
$bundle执行rails c
通过弹簧预紧器运行过程31944
加载开发环境(Rails 5.0.0)
IRB(主):001:0>自定义参数=rack::utils.parse_嵌套查询“utf8%e2%9c%93&search=something&choicen=no&querys={%22PeopeName%22%3A%22%22%22%22%2C%22%22%22%22%2C%22%22%22%22%22%22%22%22%22%2C%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%22%3%22%3%22%22%2016-01-01-01%01%20%202016-2012年12%202016-2012%22%22%22%22%22%22-31%22%2c%22bornda%22%3a%22%22%2c%22税率%22%3a%22%22}”
=>“UTF8”=>“,“,”搜索“=>“某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某“:\”\“,\”税率\“:\”\“}”}
IRB(主):002:0>querys_hash=json.parse custom_params[“querys”]
=>{“peoplename”=>“”,“peoplegroup”=>“”,“place”=>“”,“pip”=>“”,“hw”=>“”,“somerock”=>“”,“rocksomerock”=>“”,“diedat”=>“2016-01-01-2016-12-31”,“borndat”=>“”,“taxrate”=>“”}