C# - 解码字符串不会 return 原始编码的字符串
C# - Decoding a string does not return the original encoded one
我有一个随机生成的字符串,我需要把它放在 URL 中,所以我这样编码:
var encodedToken = System.Web.HttpUtility.UrlEncode(token, System.Text.Encoding.UTF8);
在 ASP.NET 操作方法中,我收到此令牌并将其解码:
var token = System.Web.HttpUtility.UrlDecode(encodedToken, System.Text.Encoding.UTF8);
但这些标记并不相同。例如,ab+cd
字符串将编码为 ab%2bcd
,解码结果将得到 ab cd
字符串(加号变为空白)。
到目前为止我只注意到+
字符问题,可能还有其他问题。
我该如何解决这个问题?
根据微软文档:
You can encode a URL using with the UrlEncode method or the UrlPathEncode method. However, the methods return different results. The UrlEncode method converts each space character to a plus character (+). The UrlPathEncode method converts each space character into the string "%20", which represents a space in hexadecimal notation. Use the UrlPathEncode method when you encode the path portion of a URL in order to guarantee a consistent decoded URL, regardless of which platform or browser performs the decoding.
https://docs.microsoft.com/en-us/dotnet/api/system.web.httputility.urlencode?view=netframework-4.7.2
在您的上下文中,您似乎不需要调用 UrlDecode
(因为 %2b
解码为 +
而 +
解码为空白 space - 即你有双重解码)。
鉴于框架似乎已经为您解码,您可以删除对 UrlDecode
的使用。
我有一个随机生成的字符串,我需要把它放在 URL 中,所以我这样编码:
var encodedToken = System.Web.HttpUtility.UrlEncode(token, System.Text.Encoding.UTF8);
在 ASP.NET 操作方法中,我收到此令牌并将其解码:
var token = System.Web.HttpUtility.UrlDecode(encodedToken, System.Text.Encoding.UTF8);
但这些标记并不相同。例如,ab+cd
字符串将编码为 ab%2bcd
,解码结果将得到 ab cd
字符串(加号变为空白)。
到目前为止我只注意到+
字符问题,可能还有其他问题。
我该如何解决这个问题?
根据微软文档:
You can encode a URL using with the UrlEncode method or the UrlPathEncode method. However, the methods return different results. The UrlEncode method converts each space character to a plus character (+). The UrlPathEncode method converts each space character into the string "%20", which represents a space in hexadecimal notation. Use the UrlPathEncode method when you encode the path portion of a URL in order to guarantee a consistent decoded URL, regardless of which platform or browser performs the decoding.
https://docs.microsoft.com/en-us/dotnet/api/system.web.httputility.urlencode?view=netframework-4.7.2
在您的上下文中,您似乎不需要调用 UrlDecode
(因为 %2b
解码为 +
而 +
解码为空白 space - 即你有双重解码)。
鉴于框架似乎已经为您解码,您可以删除对 UrlDecode
的使用。