【问题标题】:How do you append a url as a query param value如何将 url 作为查询参数值附加
【发布时间】:2016-09-19 02:22:34
【问题描述】:

我的网站有一个搜索表单,有人可以在其中搜索以 http:// 开头的 URL,如下所示:

https://www.google.com

然后应该将其编码并附加为查询参数值,如下所示:

localhost:4000/api/https%3A%2F%2Fwww.google.com

当我(上)在本地运行它时,它可以工作,但在部署时(下):

https://api.mysite.com/search/api/https%3A%2F%2Fwww.google.com%2F

=> 返回 404。

如果我输入这个:

http://localhost:4000/api/https://www.google.com

我收到此错误:

Phoenix.Router.NoRouteError at GET /api/v1/https://www.google.com
no route found for GET /api/v1/https:/www.google.com (ExternalPing.Router)

我不确定这些是否相关。将 url 作为查询参数值附加的正确方法是什么?

我已经尝试使用 URI.encode 和 URI.encode_www_form 进行编码,但他们没有解决这个问题

【问题讨论】:

  • 我认为这里的答案对你有用,即使他们没有使用路由(查看内置函数 encodeURIComponent(str) 和 encodeURI(str)。):stackoverflow.com/questions/332872/encode-url-in-javascript
  • 您确定localhost:4000/api/https%3A%2F%2Fwww.google.com 不起作用吗?它应该工作。此外,您可以使用URI.encode_www_form"http://localhost:4000/" <> URI.encode_www_form("https://www.google.com") #=> "http://localhost:4000/https%3A%2F%2Fwww.google.com" 生成它。
  • localhost:4000/api/https%3A%2F%2Fwww.google.com 确实有效,但部署后无效,如下所示:api.mysite.com/search/api/https%3A%2F%2Fwww.google.com%2F

标签: url-routing elixir phoenix-framework query-parameters


【解决方案1】:

现在你还没有发布你的服务器代码,所以我只是在这里假设。

我认为问题在于你没有对第二个字符串进行编码,因为它在 url 中包含 / 你有问题。

网址是: http://localhost:4000/api/https://www.google.com

服务器会错误地解释它。所以你要求一条名为:

/api/https:/

带有一个名为/www.google.com的参数

您需要对查询字符串进行编码。

但这又是猜测,因为我不知道您的服务器的外观。

我刚刚尝试使用未编码的 url 作为参数在我的 iis 服务器上调用端点,这就是它给我的反馈:

<Error>
    <Message>The request is invalid.</Message>
</Error>

【讨论】:

    猜你喜欢
    • 2014-11-28
    • 2023-03-28
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多