为什么Asp.Net核心QueryHelpers不编码@(at)符号?

问题描述 投票:0回答:1

在互联网上阅读各种资源,似乎我们必须在URL的查询参数(以及URL的大多数其他位置)中编码@

我试图在我的ASP.NET核心应用程序中生成一个URL,并找到了使用QueryHelpers.AddQueryString(...)执行此操作的方法。但它似乎不是编码@符号,即使它编码我测试的所有其他符号。

问题:这种行为是否有某些特殊原因,或者只是一个错误?

我的测试通过:

var url0 = QueryHelpers.AddQueryString("base", "field", "&?=čž/");
Assert.Equal("base?field=%26%3F%3D%C4%8D%C5%BE%2F", url0);

var url = QueryHelpers.AddQueryString("base", "field", "@");
Assert.Equal("base?field=@", url);
url asp.net-core encoding query-parameters
1个回答
0
投票

这是因为,简单地说,@不需要编码。它不是一个在URL上下文中表示任何内容的字符,所以它很好。像&?=这样的字符在URL的上下文中都有意义,因此必须进行编码。就unicode字符而言,我相信这些只是为了安全而编码。 URL在技术上受支持,但对此的支持相对较新,可能无法普遍实现。对它们进行编码并不会受到伤害,这样它就可以毫无问题地工作。

© www.soinside.com 2019 - 2024. All rights reserved.