Url 为什么Asp.Net核心查询帮助程序不';t编码@(at)符号?
在阅读互联网上的各种资源时,我们似乎必须编码Url 为什么Asp.Net核心查询帮助程序不';t编码@(at)符号?,url,asp.net-core,encoding,query-parameters,Url,Asp.net Core,Encoding,Query Parameters,在阅读互联网上的各种资源时,我们似乎必须编码@登录URL的查询参数(以及URL的大多数其他位置) 我试图在我的ASP.NET核心应用程序中生成一个URL,并找到了一种使用queryhelp.AddQueryString(…)的方法。但它似乎不是在编码@符号,即使它正在编码我测试的所有其他符号 问题:这种行为有什么特别的原因,还是仅仅是一个bug 我的测试通过了: var url0 = QueryHelpers.AddQueryString("base", "field", "&?=čž/
@
登录URL的查询参数(以及URL的大多数其他位置)
我试图在我的ASP.NET核心应用程序中生成一个URL,并找到了一种使用queryhelp.AddQueryString(…)
的方法。但它似乎不是在编码@
符号,即使它正在编码我测试的所有其他符号
问题:这种行为有什么特别的原因,还是仅仅是一个bug
我的测试通过了:
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支持Unicode,但对Unicode的支持相对较新,可能不会普遍实现。对它们进行编码不会有什么坏处,这样它就可以毫无问题地工作。这是因为,简单地说,@
不需要编码。它不是一个在URL上下文中有任何意义的字符,所以它是很好的。像&
、?
和=
这样的字符在URL上下文中都有意义,因此必须进行编码。就unicode字符而言,我相信这些编码只是为了安全。从技术上讲,URL支持Unicode,但对Unicode的支持相对较新,可能不会普遍实现。对它们进行编码不会有什么坏处,这样就不会有问题。我要补充的是,@
实际上是保留字符之一(在RFC中),用于URL中的身份验证。因此,在URL中简单地允许它是有点奇怪的。而且,当您需要编码时,似乎还有另一种情况,即使字符没有伤害URL。例如,+
必须进行编码,否则,浏览器会将其解释为```,因为decodeURIComponent('+')=''
我要补充的是,@
实际上是保留字符之一(在RFC中),用于URL中的身份验证。因此,在URL中简单地允许它是有点奇怪的。而且,当您需要编码时,似乎还有另一种情况,即使字符没有伤害URL。例如,必须对+
进行编码,否则,浏览器会将其解释为一个“`”,因为decodeURIComponent(“+”)=''