【问题标题】:Why Asp.Net Core QueryHelpers don't encode comma (,) symbol?为什么 Asp.Net Core QueryHelpers 不编码逗号 (,) 符号?
【发布时间】:2022-01-14 11:38:45
【问题描述】:

为什么 Asp.Net Core QueryHelpers 不编码逗号 (,) 符号?

link1link2 表示应该对逗号(,) 符号进行编码

QueryHelpers.AddQueryString(url, queryString);

上面的行返回下面的输出,状态参数中没有编码逗号(,)。

“https://bank.com?client_id=App1&redirect_uri=http%3A%2F%2Fgoogle.com&state=Alice,Bob,Cherry”

【问题讨论】:

  • 链接页面错误。逗号完全有效且安全,无需编码。它在 URL 查询字符串中没有特殊用途。
  • @madreflection,link2 提一下怎么样?
  • 他们这样做很好,这样做并没有错,但不为逗号做这件事也没有错,所以对它进行编码的期望是不正确的。
  • 现在让我们解决一下业务需求 包含技术规范的愚蠢问题。 是错的。各种错误。
  • 您可以在此处反击并说“此业务需求超出其权限范围,需要删除。”

标签: c# asp.net-core encoding urlencode


【解决方案1】:

答案:

正如@madreflection 所说,引用的文档是错误的。 C# 功能正常。

回到基础:

网络模式中指定规则的所有内容均由其各自的 RFC 制定

在这种情况下,我们必须查看:RFC 3986 about URI Generic Syntax

生成 URI 的应用程序经常使用保留字符 允许在段中分隔特定于方案的或 取消引用处理程序特定的子组件。例如, 分号 (";") 和等号 ("=") 保留字符经常被使用 分隔适用于该参数的参数和参数值 部分。逗号 (",") 保留字符通常用于
类似的目的。例如,一个 URI 生产者可能会使用一个段
例如 "name;v=1.1" 表示对
的 1.1 版的引用 “name”,而另一个可能使用诸如“name,1.1”之类的段来
表示相同。参数类型可以由特定于方案的定义 语义,但在大多数情况下,参数的语法特定于 URI 解引用算法的实现。

这里有两点很清楚:

  • 不需要编码。
  • 建议由 arch 保留用于语法问题,而不是字符串拆分分隔符。

你可以使用这个工具:https://0mg.github.io/tools/uri/ 确保您的链接在该 RFC 中有效

【讨论】:

  • 为了澄清这个答案,当我说链接页面错误时,我指的是第一个链接,这是当时提供的唯一链接。第二个链接。作为响应添加,包含准确的信息,但 OP 没有正确解释信息,这似乎也是第一个链接信息不正确的基础。
  • @madreflection 是的,对不起我的“缩写”,感谢澄清我的回答
猜你喜欢
  • 1970-01-01
  • 2021-02-13
  • 2011-03-08
  • 1970-01-01
  • 2011-06-09
  • 2015-04-03
  • 2015-03-15
相关资源
最近更新 更多