在互联网上阅读各种资源,似乎我们必须在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上下文中表示任何内容的字符,所以它很好。像&
,?
和=
这样的字符在URL的上下文中都有意义,因此必须进行编码。就unicode字符而言,我相信这些只是为了安全而编码。 URL在技术上受支持,但对此的支持相对较新,可能无法普遍实现。对它们进行编码并不会受到伤害,这样它就可以毫无问题地工作。