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 的使用。