Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Url 为什么Asp.Net核心查询帮助程序不';t编码@(at)符号?_Url_Asp.net Core_Encoding_Query Parameters - Fatal编程技术网

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(“+”)=''