看来,在互联网上阅读各种资源,我们必须在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);
答案 0 :(得分:0)
这是因为,简单地,@
不需要 进行编码。它不是一个字符,在URL上下文中没有任何意义,所以就可以了。像&
,?
和=
这样的字符在URL上下文中都具有含义,因此必须进行编码。就Unicode字符而言,我相信这些字符只是为了安全而编码。 URL在技术上支持Unicode,但是对Unicode的支持是相对较新的,因此可能无法普遍实现。不会伤害对其进行编码,那样就可以毫无问题地工作。