为什么Asp.Net Core QueryHelpers不对@(at)符号进行编码?

时间:2019-03-14 16:21:35

标签: url asp.net-core encoding query-parameters

看来,在互联网上阅读各种资源,我们必须在URL的查询参数(以及URL的其他大部分地方)中对@符号进行编码。

我试图在我的ASP.NET Core应用程序中生成一个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);

1 个答案:

答案 0 :(得分:0)

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