如何告诉 Faraday 在站点 URL 中保留 hashbang?

How to tell Faraday to preserve hashbang in site URL?

我正在开发一个实现法拉第的库的分支来构建 URLs。

site = "https://example.io/#/"
path = "oauth/authorize"
connection = Faraday.new(site)
resource = Faraday::Utils.URI(path)
URL = connection.build_url(resource)

请注意,我的网站 URL 以 hashbang 结尾。但是当上面的代码执行时,Faraday 完全去掉了 hashbang:

https://example.io/oauth/authorize

但我的应用程序需要它来构建这个 URL(使用 hashbang):

https://example.io/#/oauth/authorize

现在,在我撕掉法拉第和猴子修补一些可怕的东西之前..我可以通过在法拉第上设置一个选项来做到这一点吗?

在路径变量而不是站点变量中使用“#”,我得到了您需要的输出。

site = "https://example.io/"
path = "#/oauth/authorize"
connection = Faraday.new(site)
resource = Faraday::Utils.URI(path)
URL = connection.build_url(resource)

请尝试上面的代码,然后告诉我结果。

我认为这里的答案是停止尝试在法拉第中保留 URL 的哈希部分,因为 HTTP 请求会忽略该部分。

URL(也称为 URI "fragment identifier")的散列部分永远不会发送到服务器。它只能在客户端有意义。通常,当 HTTP 客户端是 Web 浏览器时,片段标识符包含要滚动到的元素的名称。或者,可以在一些 JavaScript 交互中使用 hashbang 技巧。

但是在 Faraday 中使用这样的 URL 是没有意义的,因为哈希部分永远不会发送到服务器。