【问题标题】:Camping is splitting URLs at question marksCamping 在问号处拆分 URL
【发布时间】:2013-02-17 02:44:13
【问题描述】:

这是我的问题:

Camping 在问号处拆分网址。

如果我们有这样的代码:

Camping.goes :CodeLine
module CodeLine::Controllers
 class Index
  def get
   render :index
  end
 end
class TextEntered < R '/(.*)'
  def get(textStringEntered)
   "#{textStringEntered}"
  end
 end
end
module CodeLine::Views
 def index
  html do
   head do
    title "Uh Oh"
   end
   body do
    text "Looks like you got to the index"
    br
    br
    form :name => "input" do
     input :type => "text", :name => "text"
     input :type => "submit", :value => "Submit"
    end
   end
  end
 end
end

运行camping path/to/file
在浏览器中转到localhost:3301 并在文本字段中输入一些文本并点击提交后,您应该会看到斜杠后面的所有内容,但它会在问号处拆分网址,因为它认为斜杠后面没有任何内容,它会将您带到索引。

问题: 是否可以设置input 使其不使用问号,或者我可以让露营不在问号处拆分?

附录 A
测试于
1. 谷歌浏览器
2.火狐
3. 野生动物园

【问题讨论】:

  • 问号是 URL 中的一个特殊字符,表示它之前的所有内容都是路径,之后的每个内容都是查询字符串。这是您构建 url 的方式,还是您尝试访问名称中包含问号的资源?如果是后者,请尝试使用编码%3F 替换问号。
  • @Zach Kemp - 我可以构造不带问号的 URL 吗?例如。 example.com/text=foobarbazqux 而不是 example.com/?text=foobarbazqux

标签: ruby model-view-controller url camping markaby


【解决方案1】:

路由只匹配URL的路径

https://example.com/hello/world?a=this&b=hello&c=world#nice
^       ^          ^            ^                      ^
Schema  Host       Path         Query parameters       Fragment

在 Camping 中,您可以通过 @input 访问查询参数:

@input.a # => "this"
@input.b # => "hello"
@input.c # => "world"

查询参数更像是可以传递给控制器​​的“选项”。例如,您不希望有一个单独的控制器来处理“按名称排序”和“按日期排序”,因此您可以使用查询参数:

class Search
  def get
    query = @input.q || "*"
    page = (@input.page || 1).to_i
    sort = @input.sort || "name"
    @results = fetch_results_from_database_or_something(query, page, sort)
    render :search
  end
end

这样,所有这些工作:

/search?query=hello  # Page 1, sort by name
/search?page=5       # Page 5, sort by name, search for everything
/search?query=cars&page=4&sort=date

【讨论】:

  • 除非为表单指定了操作并且该操作被路由到“搜索”控制器,否则仍会进入索引。不是什么大问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 2013-09-20
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
相关资源
最近更新 更多