首页 > 解决方案 > 为什么 Asp.Net Core QueryHelpers 不编码 @ (at) 符号?

问题描述

阅读互联网上的各种资源,似乎我们必须@在 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);

标签: urlasp.net-coreencodingquery-parameters

解决方案


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


推荐阅读