Html 查询字符串中Base64编码参数存在问题

Html 查询字符串中Base64编码参数存在问题,html,asp.net-mvc-3,c#-4.0,hyperlink,Html,Asp.net Mvc 3,C# 4.0,Hyperlink,我正在向用户发送web应用程序中的链接邮件(用于确认用户注册),如下所示: <a target="_blank" href="http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA=="> http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA== </a> 但Chrome会提醒此消息:

我正在向用户发送web应用程序中的链接邮件(用于确认用户注册),如下所示:

<a target="_blank" href="http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA==">
http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA==
</a>

但Chrome会提醒此消息:

查询字符串是否无效?我如何解决它

顺便说一句:

我的应用程序是C#和MVC3

您可能应该对参数值进行URL编码,因为
=
本身用于将参数名称与参数值分开。

您应该对
确认
参数进行URL编码。您得到的错误是因为最后一个
==
片段


用于此用途或类似的框架方法。

您可以通过将两个字符
+
替换为
\
/
替换为
-
来发送值:

string confirm=confirm.Replace('+', '_').Replace('/', '+');

<a target="_blank" href="http://localhost:2817/ConfirmRegistration?confirm=@confirm">
http://localhost:2817/ConfirmRegistration?confirm=@confirm
</a>

我使用的是HttpUtility.UrlEncode,但是如果base64编码的字符串包含“+”符号,我就会遇到问题。它被正确地编码为“%2b”,但当它从浏览器返回时,它被解释为一个空格。因此,我使用了两种简单的编码/解码方法:

public static string UrlEncodeBase64(string base64Input)
{
    return base64Input.Replace('+', '.').Replace('/', '_').Replace('=', '-');
}

public static string UrlDecodeBase64(string encodedBase64Input)
{
    return encodedBase64Input.Replace('.', '+').Replace('_', '/').Replace('-', '=');
}

如果您使用的是ASP.net core,您可以使用WebEncoders.Base64UrlEncode和WebEncoders.Base64UrlDecode

可能重复的I've user
Url.Encode
,确认查询字符串更改为
?确认=Y0tcmGepe7wjH7A1CT1IaA%3d%3d
,但谷歌再次提醒相同的消息!我遇到了将“+”符号解释为空格的问题,因此我不得不自己替换三个不安全的base64字符,请参见:
public static string UrlEncodeBase64(string base64Input)
{
    return base64Input.Replace('+', '.').Replace('/', '_').Replace('=', '-');
}

public static string UrlDecodeBase64(string encodedBase64Input)
{
    return encodedBase64Input.Replace('.', '+').Replace('_', '/').Replace('-', '=');
}