使用Sinatra路由,如何在路径的同一部分中同时存在必需的命名参数和可选的命名参数。
可选路由参数在这里正常工作
get '/widgets.?:format?'
但是,尝试组合一个必需的命名参数,事情就会破坏。
get '/widgets/:id.?:format?'
对/widgets/abc.json的请求将整个abc.json作为id参数传递。
Sinatra编译的正则表达式是:
/^\/widgets\/([^\/?#]+)(?:\.|%2E)?([^\/?#]+)?$/
答案 0 :(得分:2)
我确实通过在路线上使用完整的正则表达式而排除了“。”。来自第一个正则表达集团。
get %r{/widgets\/([^\/?#\.]+)(?:\.|%2E)?([^\/?#]+)?}